Fundamentos de R
¶


Clase 1: Introducción¶

In [159]:
# R: Lenguage de programación especializado en estadística

# Para el curso vamos a necesitar:
# - [R](https://cran.r-project.org/).
# - [RStudio](https://www.rstudio.com/products/rstudio/download/).
# - Dataset 1: [El dataset de Orange Economy](https://github.com/sap0408/Orange-Economy). (Csv)
# - Dataset 2: [https://github.com/sap0408/mtcars]
# - Colocar los Datasets en la misma carpeta donde está situado Fundamentos.ipynb (el script)

Clase 2: Programación y Data Science¶

In [2]:
# Actualmente estamos viviendo la 4ta revolución industrial, la revolución del **Big Data**.

# Big Data se compone de tres componentes claves:

# - **Volumen:** tiene una cantidad de datos mucho mayor a la soportada dentro de un Excel.
# - **Velocidad:** mayor a la acostumbrada con anterioridad.
# - **Variedad:** se manejan datos estructurados y no estructurados como fotos, mensajes, etc.

# También se analiza el Small Data (datos de nuestras empresas, o casos focalizados)

# Un científico de datos necesita tener los conocimientos de:

# - Matemáticas y estadística.
# - Programación.
# - Conocimiento del negocio o contexto.
# - Habilidad para visualizar los datos y capacidad para comunicarlos.

Clase 3: R y proyecto “Economía naranja”¶

In [3]:
# Para la ciencia de datos es común utilizar dos lenguajes: R y Python. En este curso veremos R, un lenguaje especializado en manejar datos de manera estadística creado en 1993 en la universidad de Auckland Nueva Zelanda.

# A lo largo del curso veremos:

# - Estructuras, tipos de datos y sintaxis.
# - EDA: Exploratory data analysis.
# - Estadística descriptiva.
# - Ajuste de datos.
# - Visualización de datos.
# - Organización de información con R Markdown.

# **¿Qué es la economía naranja?**

# Es la intersección  de las industrias culturales con las áreas de soporte como el desarrollo de aplicaciones o software.

# Buscaremos responder a la pregunta:
# *Si tienes un startup de desarrollo de software, ¿en qué país abrirías una oficina?*

# El dataset de economía naranja fue creado por la profesora con las siguientes variables:

# - Aporte de servicios a PIB.
# - Aporte de economía naranja a PIB.
# - Penetración de internet.
# - Inflación.
# - Tasa de desempleo.
# - Población debajo de la línea de pobreza.
# - Edad mediana de la población.
# - Porcentaje de la población entre 25-54 años.
# - Inversión en educación %PIB.

Clase 4: Instalaciones¶

In [4]:
# Instalación de los programas descargados al inicio del curso.
# - [R](https://cran.r-project.org/).
# - [RStudio](https://www.rstudio.com/products/rstudio/download/).
# - [El dataset de Orange Economy](https://github.com/sap0408/Orange-Economy). (Csv)
# - [https://github.com/sap0408/mtcars]
In [5]:
# Importamos los Archivos a utilizar
# Si deseas importar un archivo CSV con la opción de encabezado (header) en "YES" 
# para indicar que la primera fila contiene los nombres de las columnas
# se puede utilizar el parámetro header de la función read.csv().

orangeec <- read.csv("./orangeec.csv", header = TRUE)
mtcars <- read.csv("./mtcars.csv", header = TRUE)

# La función View nos muestra nuestro dataset en forma de tabla.
# Podemos cargar la vista de un csv con la funcion **View(nombre_dataset)** 
View(mtcars)
A data.frame: 32 × 12
modelmpgcyldisphpdratwtqsecvsamgearcarb
<chr><dbl><int><dbl><int><dbl><dbl><dbl><int><int><int><int>
Mazda RX4 21.06160.01103.902.62016.460144
Mazda RX4 Wag 21.06160.01103.902.87517.020144
Datsun 710 22.84108.0 933.852.32018.611141
Hornet 4 Drive 21.46258.01103.083.21519.441031
Hornet Sportabout 18.78360.01753.153.44017.020032
Valiant 18.16225.01052.763.46020.221031
Duster 360 14.38360.02453.213.57015.840034
Merc 240D 24.44146.7 623.693.19020.001042
Merc 230 22.84140.8 953.923.15022.901042
Merc 280 19.26167.61233.923.44018.301044
Merc 280C 17.86167.61233.923.44018.901044
Merc 450SE 16.48275.81803.074.07017.400033
Merc 450SL 17.38275.81803.073.73017.600033
Merc 450SLC 15.28275.81803.073.78018.000033
Cadillac Fleetwood 10.48472.02052.935.25017.980034
Lincoln Continental10.48460.02153.005.42417.820034
Chrysler Imperial 14.78440.02303.235.34517.420034
Fiat 128 32.44 78.7 664.082.20019.471141
Honda Civic 30.44 75.7 524.931.61518.521142
Toyota Corolla 33.94 71.1 654.221.83519.901141
Toyota Corona 21.54120.1 973.702.46520.011031
Dodge Challenger 15.58318.01502.763.52016.870032
AMC Javelin 15.28304.01503.153.43517.300032
Camaro Z28 13.38350.02453.733.84015.410034
Pontiac Firebird 19.28400.01753.083.84517.050032
Fiat X1-9 27.34 79.0 664.081.93518.901141
Porsche 914-2 26.04120.3 914.432.14016.700152
Lotus Europa 30.44 95.11133.771.51316.901152
Ford Pantera L 15.88351.02644.223.17014.500154
Ferrari Dino 19.76145.01753.622.77015.500156
Maserati Bora 15.08301.03353.543.57014.600158
Volvo 142E 21.44121.01094.112.78018.601142

Clase 5: Primeros cálculos con R y variables¶

Dos comandos que utilizaras muy seguidos son:

(Ctrl + L): Se encarga de borrar la consola. (Ctrl + Enter): Realiza la operación que selecciones.

Asignar un valor a una variable dentro de R se hace mediante el par de signos <- quedando, por ejemplo: x <- 10

In [6]:
# Ejemplos:
Oficina = 7
Transporte <- 1.5
Tiempo_al_dia <- Oficina +  Transporte
Tiempo_al_dia

Corte_1 <-  0.3
Corte_2 <-  0.3
Corte_3 <-  0.4

Nota_1 <- 4.0
Nota_2 <- 4.6
Nota_3 <- 3.0

Nota_c_1 <- Nota_1 * Corte_1
Nota_c_1

Nota_c_2 <- Nota_2 * Corte_2
Nota_c_2

Nota_c_3 <- Nota_3 * Corte_3
Nota_c_3

Nota_final <- Nota_1 + Nota_2 + Nota_3
Nota_final
8.5
1.2
1.38
1.2
11.6

Clase 6: Tipos de datos¶

In [7]:
View(mtcars)
A data.frame: 32 × 12
modelmpgcyldisphpdratwtqsecvsamgearcarb
<chr><dbl><int><dbl><int><dbl><dbl><dbl><int><int><int><int>
Mazda RX4 21.06160.01103.902.62016.460144
Mazda RX4 Wag 21.06160.01103.902.87517.020144
Datsun 710 22.84108.0 933.852.32018.611141
Hornet 4 Drive 21.46258.01103.083.21519.441031
Hornet Sportabout 18.78360.01753.153.44017.020032
Valiant 18.16225.01052.763.46020.221031
Duster 360 14.38360.02453.213.57015.840034
Merc 240D 24.44146.7 623.693.19020.001042
Merc 230 22.84140.8 953.923.15022.901042
Merc 280 19.26167.61233.923.44018.301044
Merc 280C 17.86167.61233.923.44018.901044
Merc 450SE 16.48275.81803.074.07017.400033
Merc 450SL 17.38275.81803.073.73017.600033
Merc 450SLC 15.28275.81803.073.78018.000033
Cadillac Fleetwood 10.48472.02052.935.25017.980034
Lincoln Continental10.48460.02153.005.42417.820034
Chrysler Imperial 14.78440.02303.235.34517.420034
Fiat 128 32.44 78.7 664.082.20019.471141
Honda Civic 30.44 75.7 524.931.61518.521142
Toyota Corolla 33.94 71.1 654.221.83519.901141
Toyota Corona 21.54120.1 973.702.46520.011031
Dodge Challenger 15.58318.01502.763.52016.870032
AMC Javelin 15.28304.01503.153.43517.300032
Camaro Z28 13.38350.02453.733.84015.410034
Pontiac Firebird 19.28400.01753.083.84517.050032
Fiat X1-9 27.34 79.0 664.081.93518.901141
Porsche 914-2 26.04120.3 914.432.14016.700152
Lotus Europa 30.44 95.11133.771.51316.901152
Ford Pantera L 15.88351.02644.223.17014.500154
Ferrari Dino 19.76145.01753.622.77015.500156
Maserati Bora 15.08301.03353.543.57014.600158
Volvo 142E 21.44121.01094.112.78018.601142
In [8]:
View(orangeec)
A data.frame: 17 × 13
CountryGDP.PCGDP.US.billGDP.Growth..Services...GDPCreat.Ind...GDPInflationUnemploymentX..pop.below.poverty.lineInternet.penetration...populationMedian.ageX..pop.25.54Education.invest...GDP
<chr><int><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
Argentina 20900 637.72.960.93.825.7 8.125.793.131.739.385.9
Belize 8300 1854.00.862.2 NA 1.110.141.052.322.736.627.4
Bolivia 7500 37.14.250.0 NA 2.8 4.038.678.624.337.487.3
Brazil 156002055000.01.072.82.6 3.411.8 4.270.732.043.865.9
Chile 24500 277.01.564.32.2 2.2 7.014.477.534.443.084.9
Colombia 14500 309.21.861.43.3 4.310.528.063.230.041.914.5
Costa Rica 16900 58.13.273.52.0 1.6 8.121.786.731.344.037.1
Ecuador 11500 102.32.756.92.0 0.4 4.621.579.927.739.595.0
El Salvador 8900 28.02.464.9 NA 1.0 7.032.757.727.139.233.5
Guatemala 8100 75.72.863.2 NA 4.4 2.359.342.122.134.122.8
Honduras 5600 22.94.857.8 NA 3.9 5.929.638.223.036.635.9
Mexico 199001149000.02.064.07.4 6.0 3.646.265.028.340.815.3
Nicaragua 5800 13.74.950.8 NA 3.9 6.529.643.025.740.244.5
Panama 25400 61.85.482.06.3 0.9 5.523.069.729.240.353.2
Paraguay 9800 29.64.354.54.1 3.6 6.522.289.628.241.085.0
Peru 13300 215.22.556.81.5 2.8 6.722.767.628.040.193.8
Uruguay 22400 58.43.168.81.0 6.2 7.3 9.788.235.039.344.4
In [9]:
#str(mtcars) significa estructura(dataset)
str(mtcars)
'data.frame':	32 obs. of  12 variables:
 $ model: chr  "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
 $ mpg  : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl  : int  6 6 4 6 8 6 8 4 4 6 ...
 $ disp : num  160 160 108 258 360 ...
 $ hp   : int  110 110 93 110 175 105 245 62 95 123 ...
 $ drat : num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt   : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec : num  16.5 17 18.6 19.4 17 ...
 $ vs   : int  0 0 1 1 0 1 0 1 1 1 ...
 $ am   : int  1 1 1 0 0 0 0 0 0 0 ...
 $ gear : int  4 4 4 3 3 3 3 4 4 4 ...
 $ carb : int  4 4 1 1 2 1 4 2 2 4 ...
In [10]:
# Dentro de la consola escribimos ?mtcars  para obtner más información sobre 
# nuestro de nuestro dataset, abrirá la ayuda correspondiente a nuestro dataset
?mtcars
In [11]:
# Ver clase o tipo de dato de la variable vs del DataFrame, 
# pero debería ser booleana
class(mtcars$vs)
'integer'
In [12]:
# sustituir el tipo de variable(tipo de clase)
mtcars$vs = as.logical(mtcars$vs) # logical significa booleana
mtcars$am = as.logical(mtcars$am)

# Vemos de nuevo la estructura del datase
str(mtcars)
'data.frame':	32 obs. of  12 variables:
 $ model: chr  "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
 $ mpg  : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl  : int  6 6 4 6 8 6 8 4 4 6 ...
 $ disp : num  160 160 108 258 360 ...
 $ hp   : int  110 110 93 110 175 105 245 62 95 123 ...
 $ drat : num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt   : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec : num  16.5 17 18.6 19.4 17 ...
 $ vs   : logi  FALSE FALSE TRUE TRUE FALSE TRUE ...
 $ am   : logi  TRUE TRUE TRUE FALSE FALSE FALSE ...
 $ gear : int  4 4 4 3 3 3 3 4 4 4 ...
 $ carb : int  4 4 1 1 2 1 4 2 2 4 ...

Clase 6: Tipos de datos¶

In [13]:
#str(mtcars) significa estructura(dataset)
str(mtcars)


?mtcars
'data.frame':	32 obs. of  12 variables:
 $ model: chr  "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
 $ mpg  : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl  : int  6 6 4 6 8 6 8 4 4 6 ...
 $ disp : num  160 160 108 258 360 ...
 $ hp   : int  110 110 93 110 175 105 245 62 95 123 ...
 $ drat : num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt   : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec : num  16.5 17 18.6 19.4 17 ...
 $ vs   : logi  FALSE FALSE TRUE TRUE FALSE TRUE ...
 $ am   : logi  TRUE TRUE TRUE FALSE FALSE FALSE ...
 $ gear : int  4 4 4 3 3 3 3 4 4 4 ...
 $ carb : int  4 4 1 1 2 1 4 2 2 4 ...
In [14]:
#ver clase de variable vs del DataFrame
class(mtcars$vs)

# sustituir el tipo de variable(tipo de clase)
mtcars$vs = as.logical(mtcars$vs) # los pasa a booleano
mtcars$am = as.logical(mtcars$am)

# Vemos de nuevo la estructura del datase
str(mtcars)
'logical'
'data.frame':	32 obs. of  12 variables:
 $ model: chr  "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
 $ mpg  : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl  : int  6 6 4 6 8 6 8 4 4 6 ...
 $ disp : num  160 160 108 258 360 ...
 $ hp   : int  110 110 93 110 175 105 245 62 95 123 ...
 $ drat : num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt   : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec : num  16.5 17 18.6 19.4 17 ...
 $ vs   : logi  FALSE FALSE TRUE TRUE FALSE TRUE ...
 $ am   : logi  TRUE TRUE TRUE FALSE FALSE FALSE ...
 $ gear : int  4 4 4 3 3 3 3 4 4 4 ...
 $ carb : int  4 4 1 1 2 1 4 2 2 4 ...

Clase 7: Análisis de la estructura del dataset¶

In [15]:
# summary(): Muestra un resumen del dataset que le mandemos 
# (similar a Describe de Pandas).

# transform(): Modifica los valores de un dataset.

# Exploramos tipos de datos
str(orangeec)
'data.frame':	17 obs. of  13 variables:
 $ Country                          : chr  "Argentina" "Belize" "Bolivia" "Brazil" ...
 $ GDP.PC                           : int  20900 8300 7500 15600 24500 14500 16900 11500 8900 8100 ...
 $ GDP.US.bill                      : num  6.38e+02 1.85e+03 3.71e+01 2.06e+06 2.77e+02 ...
 $ GDP.Growth..                     : num  2.9 0.8 4.2 1 1.5 1.8 3.2 2.7 2.4 2.8 ...
 $ Services...GDP                   : num  60.9 62.2 50 72.8 64.3 61.4 73.5 56.9 64.9 63.2 ...
 $ Creat.Ind...GDP                  : num  3.8 NA NA 2.6 2.2 3.3 2 2 NA NA ...
 $ Inflation                        : num  25.7 1.1 2.8 3.4 2.2 4.3 1.6 0.4 1 4.4 ...
 $ Unemployment                     : num  8.1 10.1 4 11.8 7 10.5 8.1 4.6 7 2.3 ...
 $ X..pop.below.poverty.line        : num  25.7 41 38.6 4.2 14.4 28 21.7 21.5 32.7 59.3 ...
 $ Internet.penetration...population: num  93.1 52.3 78.6 70.7 77.5 63.2 86.7 79.9 57.7 42.1 ...
 $ Median.age                       : num  31.7 22.7 24.3 32 34.4 30 31.3 27.7 27.1 22.1 ...
 $ X..pop.25.54                     : num  39.4 36.6 37.5 43.9 43.1 ...
 $ Education.invest...GDP           : num  5.9 7.4 7.3 5.9 4.9 4.5 7.1 5 3.5 2.8 ...
In [16]:
#Summary / el Describe de pandas
summary(orangeec)
   Country              GDP.PC       GDP.US.bill         GDP.Growth..  
 Length:17          Min.   : 5600   Min.   :     13.7   Min.   :0.800  
 Class :character   1st Qu.: 8300   1st Qu.:     37.1   1st Qu.:2.000  
 Mode  :character   Median :13300   Median :     75.7   Median :2.800  
                    Mean   :14053   Mean   : 188693.0   Mean   :2.959  
                    3rd Qu.:19900   3rd Qu.:    309.2   3rd Qu.:4.200  
                    Max.   :25400   Max.   :2055000.0   Max.   :5.400  
                                                                       
 Services...GDP  Creat.Ind...GDP   Inflation       Unemployment   
 Min.   :50.00   Min.   :1.000   Min.   : 0.400   Min.   : 2.300  
 1st Qu.:56.90   1st Qu.:2.000   1st Qu.: 1.600   1st Qu.: 5.500  
 Median :62.20   Median :2.600   Median : 3.400   Median : 6.700  
 Mean   :62.64   Mean   :3.291   Mean   : 4.365   Mean   : 6.794  
 3rd Qu.:64.90   3rd Qu.:3.950   3rd Qu.: 4.300   3rd Qu.: 8.100  
 Max.   :82.00   Max.   :7.400   Max.   :25.700   Max.   :11.800  
                 NA's   :6                                        
 X..pop.below.poverty.line Internet.penetration...population   Median.age   
 Min.   : 4.20             Min.   :38.20                     Min.   :22.10  
 1st Qu.:21.70             1st Qu.:57.70                     1st Qu.:25.70  
 Median :25.70             Median :69.70                     Median :28.20  
 Mean   :27.65             Mean   :68.42                     Mean   :28.28  
 3rd Qu.:32.70             3rd Qu.:79.90                     3rd Qu.:31.30  
 Max.   :59.30             Max.   :93.10                     Max.   :35.00  
                                                                            
  X..pop.25.54   Education.invest...GDP
 Min.   :34.12   Min.   :2.800         
 1st Qu.:39.23   1st Qu.:4.400         
 Median :40.19   Median :5.000         
 Mean   :39.88   Mean   :5.082         
 3rd Qu.:41.08   3rd Qu.:5.900         
 Max.   :44.03   Max.   :7.400         
                                       
In [17]:
# Exploramos el 2do dataset
summary(mtcars) # Summary significa RESUMEN
    model                mpg             cyl             disp      
 Length:32          Min.   :10.40   Min.   :4.000   Min.   : 71.1  
 Class :character   1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8  
 Mode  :character   Median :19.20   Median :6.000   Median :196.3  
                    Mean   :20.09   Mean   :6.188   Mean   :230.7  
                    3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0  
                    Max.   :33.90   Max.   :8.000   Max.   :472.0  
       hp             drat             wt             qsec      
 Min.   : 52.0   Min.   :2.760   Min.   :1.513   Min.   :14.50  
 1st Qu.: 96.5   1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89  
 Median :123.0   Median :3.695   Median :3.325   Median :17.71  
 Mean   :146.7   Mean   :3.597   Mean   :3.217   Mean   :17.85  
 3rd Qu.:180.0   3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90  
 Max.   :335.0   Max.   :4.930   Max.   :5.424   Max.   :22.90  
     vs              am               gear            carb      
 Mode :logical   Mode :logical   Min.   :3.000   Min.   :1.000  
 FALSE:18        FALSE:19        1st Qu.:3.000   1st Qu.:2.000  
 TRUE :14        TRUE :13        Median :4.000   Median :2.000  
                                 Mean   :3.688   Mean   :2.812  
                                 3rd Qu.:4.000   3rd Qu.:4.000  
                                 Max.   :5.000   Max.   :8.000  
In [18]:
# Realizamos la conversion de datos de mtcars de sistema imperial a decimal
# convirtiendo la variable wt a [kg]
wt <- (mtcars$wt*1000)/2
wt
  1. 1310
  2. 1437.5
  3. 1160
  4. 1607.5
  5. 1720
  6. 1730
  7. 1785
  8. 1595
  9. 1575
  10. 1720
  11. 1720
  12. 2035
  13. 1865
  14. 1890
  15. 2625
  16. 2712
  17. 2672.5
  18. 1100
  19. 807.5
  20. 917.5
  21. 1232.5
  22. 1760
  23. 1717.5
  24. 1920
  25. 1922.5
  26. 967.5
  27. 1070
  28. 756.5
  29. 1585
  30. 1385
  31. 1785
  32. 1390
In [19]:
# Guardamos un nuevo dataset
mtcars.new <- transform(mtcars,wt=wt*1000/2)
mtcars.new
A data.frame: 32 × 12
modelmpgcyldisphpdratwtqsecvsamgearcarb
<chr><dbl><int><dbl><int><dbl><dbl><dbl><lgl><lgl><int><int>
Mazda RX4 21.06160.01103.901310.016.46FALSE TRUE44
Mazda RX4 Wag 21.06160.01103.901437.517.02FALSE TRUE44
Datsun 710 22.84108.0 933.851160.018.61 TRUE TRUE41
Hornet 4 Drive 21.46258.01103.081607.519.44 TRUEFALSE31
Hornet Sportabout 18.78360.01753.151720.017.02FALSEFALSE32
Valiant 18.16225.01052.761730.020.22 TRUEFALSE31
Duster 360 14.38360.02453.211785.015.84FALSEFALSE34
Merc 240D 24.44146.7 623.691595.020.00 TRUEFALSE42
Merc 230 22.84140.8 953.921575.022.90 TRUEFALSE42
Merc 280 19.26167.61233.921720.018.30 TRUEFALSE44
Merc 280C 17.86167.61233.921720.018.90 TRUEFALSE44
Merc 450SE 16.48275.81803.072035.017.40FALSEFALSE33
Merc 450SL 17.38275.81803.071865.017.60FALSEFALSE33
Merc 450SLC 15.28275.81803.071890.018.00FALSEFALSE33
Cadillac Fleetwood 10.48472.02052.932625.017.98FALSEFALSE34
Lincoln Continental10.48460.02153.002712.017.82FALSEFALSE34
Chrysler Imperial 14.78440.02303.232672.517.42FALSEFALSE34
Fiat 128 32.44 78.7 664.081100.019.47 TRUE TRUE41
Honda Civic 30.44 75.7 524.93 807.518.52 TRUE TRUE42
Toyota Corolla 33.94 71.1 654.22 917.519.90 TRUE TRUE41
Toyota Corona 21.54120.1 973.701232.520.01 TRUEFALSE31
Dodge Challenger 15.58318.01502.761760.016.87FALSEFALSE32
AMC Javelin 15.28304.01503.151717.517.30FALSEFALSE32
Camaro Z28 13.38350.02453.731920.015.41FALSEFALSE34
Pontiac Firebird 19.28400.01753.081922.517.05FALSEFALSE32
Fiat X1-9 27.34 79.0 664.08 967.518.90 TRUE TRUE41
Porsche 914-2 26.04120.3 914.431070.016.70FALSE TRUE52
Lotus Europa 30.44 95.11133.77 756.516.90 TRUE TRUE52
Ford Pantera L 15.88351.02644.221585.014.50FALSE TRUE54
Ferrari Dino 19.76145.01753.621385.015.50FALSE TRUE56
Maserati Bora 15.08301.03353.541785.014.60FALSE TRUE58
Volvo 142E 21.44121.01094.111390.018.60 TRUE TRUE42
In [20]:
summary(mtcars.new) # Resumen del DataSet mtcars
    model                mpg             cyl             disp      
 Length:32          Min.   :10.40   Min.   :4.000   Min.   : 71.1  
 Class :character   1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8  
 Mode  :character   Median :19.20   Median :6.000   Median :196.3  
                    Mean   :20.09   Mean   :6.188   Mean   :230.7  
                    3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0  
                    Max.   :33.90   Max.   :8.000   Max.   :472.0  
       hp             drat             wt              qsec      
 Min.   : 52.0   Min.   :2.760   Min.   : 756.5   Min.   :14.50  
 1st Qu.: 96.5   1st Qu.:3.080   1st Qu.:1290.6   1st Qu.:16.89  
 Median :123.0   Median :3.695   Median :1662.5   Median :17.71  
 Mean   :146.7   Mean   :3.597   Mean   :1608.6   Mean   :17.85  
 3rd Qu.:180.0   3rd Qu.:3.920   3rd Qu.:1805.0   3rd Qu.:18.90  
 Max.   :335.0   Max.   :4.930   Max.   :2712.0   Max.   :22.90  
     vs              am               gear            carb      
 Mode :logical   Mode :logical   Min.   :3.000   Min.   :1.000  
 FALSE:18        FALSE:19        1st Qu.:3.000   1st Qu.:2.000  
 TRUE :14        TRUE :13        Median :4.000   Median :2.000  
                                 Mean   :3.688   Mean   :2.812  
                                 3rd Qu.:4.000   3rd Qu.:4.000  
                                 Max.   :5.000   Max.   :8.000  

Clase 8: Vectores¶

In [21]:
# Los vectores pueden ser de un solo tipo de dato y multidimensionales
# c signidica "contenedor"

tiempo_platzi <- c(25,5,10,15,10)
tiempo_lecturas <- c(30,10,5,10,5)
tiempo_aprendizaje <- tiempo_platzi + tiempo_lecturas # Suma punto a punto
tiempo_aprendizaje
  1. 55
  2. 15
  3. 15
  4. 25
  5. 15
In [22]:
# Ejemplo: Vector de Strings
dias_aprendizaje <- c("Lunes", "Martes", "Miércoles", "Jueves", "Viernes")
dias_aprendizaje
  1. 'Lunes'
  2. 'Martes'
  3. 'Miércoles'
  4. 'Jueves'
  5. 'Viernes'
In [23]:
# Vector Booleano
dias_mas_20min <- c(TRUE, FALSE, FALSE, TRUE, TRUE)
dias_mas_20min
  1. TRUE
  2. FALSE
  3. FALSE
  4. TRUE
  5. TRUE
In [24]:
## Sumando datos numéricos dentro de un vector . . .
total_tiempo_platzi <- sum(tiempo_platzi)
total_tiempo_platzi

total_tiempo_lecturas <- sum(tiempo_lecturas)
total_tiempo_lecturas

total_tiempo <- total_tiempo_platzi + total_tiempo_lecturas
total_tiempo
65
60
125

Matrices¶

In [25]:
# Una matriz debe tener elementos del mismo tipo de datos, 
# si tiene datos de tipos diferentes es un dataFrame.

# Para crear una matriz en R utilizaremos la función matrix cuyos argumentos son:

# 1.- La información de los elementos que componen la matriz (pueden ser vectores).
# 2.- **nrow:** número de filas.
# Nrow = Se refiere a la cantidad de filas, recuerden que las filas son las horizontales. 
# Es importante tener en cuenta que la función cuenta la cantidad total de elementos de los datos 
# y los divide entre la cantidad de filas que quieras, por lo que si la división no es exacta 
# se repetirán los primeros elementos de los datos.

# 3.- **ncol:** número de columnas.
# 4.- **byrow:** booleano para indicar si llenar la matriz por filas.

# **colSums** es una función que por argumento recibe una matriz y te retorna la suma de los valores de sus columnas.
In [26]:
## Vectors
tiempo_platzi <- c(25,5,10,15,10)
tiempo_lecturas <- c(30,10,5,10,5)

# En este ejemplo la profesora usa un nuevo vector que recoge los elementos 
# de los dos vectores anteriores:
# Vector1<-c(1,2,3)
# Vector2<-c(4,5,6)
# c(vector1,vector2) = 1,2,3,4,5,6
# Ella está mezclando los dos vectores anteriores en uno solo, también pueden 
# hacer esto:
# Vector3<-c(vector1,vector2)

# matriz <- matrix(vector3, …) Y funcionará igual
## matrix
# c signidica "contenedor"
# Nrow = Se refiere a la cantidad de filas, recuerden que las filas son las horizontales. 
# Es importante tener en cuenta que la función cuenta la cantidad total de elementos de los datos 
# y los divide entre la cantidad de filas que quieras, por lo que si la división no es exacta 
# se repetirán los primeros elementos de los datos.
tiempo_matrix <- matrix(c(tiempo_platzi, tiempo_lecturas),
                        nrow = 2, 
                        byrow = TRUE
                       )

dias <- c("Lunes", "MarteS", "Miércoles", "Jueves", "Viernes")
Tiempo <- c("total_tiempo_platzi", "total_tiempo_lecturas")

# Definiendo nombre de columnas y filas
colnames(tiempo_matrix) <- dias
rownames(tiempo_matrix) <- Tiempo

tiempo_matrix
A matrix: 2 × 5 of type dbl
LunesMarteSMiércolesJuevesViernes
total_tiempo_platzi25 5101510
total_tiempo_lecturas3010 510 5
In [27]:
# Cuánto tiempo de estudio por día se está cumpliendo?
# Sumatoria por columna
tiempo_dia = colSums(tiempo_matrix)
tiempo_dia
Lunes
55
MarteS
15
Miércoles
15
Jueves
25
Viernes
15

Clase 10 Ejercicios con matrices¶

In [28]:
# **rbind:** función para añadir una fila."Row bind"

# Para seleccionar rápidamente un elemento de una matriz solamente debemos
# indicar entre corchetes el número de la fila y de la columna (similar a python).

# Agregar una columna a nuestra matriz para indicar el día Sábado:

final_matrix <- rbind(tiempo_matrix,c(10,15,30,5,0))
final_matrix
A matrix: 3 × 5 of type dbl
LunesMarteSMiércolesJuevesViernes
total_tiempo_platzi25 5101510
total_tiempo_lecturas3010 510 5
101530 5 0
In [29]:
# Una forma sencilla de agregar una columna incluyendo el nombre de cabecera seria:
# final_matrix <- cbind(final_matrix, Sabado = c(1, 2, 3))
final_matrix <- cbind(final_matrix, Sabado = c(1, 2, 3))
final_matrix
A matrix: 3 × 6 of type dbl
LunesMarteSMiércolesJuevesViernesSabado
total_tiempo_platzi25 51015101
total_tiempo_lecturas3010 510 52
101530 5 03
In [30]:
# Agregar nombre a una fila específica
rownames(final_matrix)[3] <- "Tiempo_agregado"
final_matrix
A matrix: 3 × 6 of type dbl
LunesMarteSMiércolesJuevesViernesSabado
total_tiempo_platzi25 51015101
total_tiempo_lecturas3010 510 52
Tiempo_agregado101530 5 03
In [31]:
tiempo_dia = colSums(final_matrix)
tiempo_dia
Lunes
65
MarteS
30
Miércoles
45
Jueves
30
Viernes
15
Sabado
6
In [32]:
# Ubicar elementos, se usan corchetes y un par de índices separados por coma.
final_matrix[1,5]
10

Clase 11: Operadores para comparar y ubicar datos (filtros)¶

In [33]:
# Para usar ‘rename’ y así renombrar columnas se debe instalar el paquete plyr:
# library("plyr")  # cargar la biblioteca plyr (atención a las comillas que no deben ser comillas curvas)
# ó
# en el panel de Packages dar check a la casilla de plyr
# En caso de no tener el paquete instalado solamente corremos en la consola el código install.packages("plyr"), 
# después lo activas manual o con la consola.

image.png

In [ ]:
install.packages("plyr")
In [35]:
mtcars[ mtcars$cyl<6,] # no olvidar la coma al final (tabla con cilindros menores a 6)
A data.frame: 11 × 12
modelmpgcyldisphpdratwtqsecvsamgearcarb
<chr><dbl><int><dbl><int><dbl><dbl><dbl><lgl><lgl><int><int>
3Datsun 710 22.84108.0 933.852.32018.61 TRUE TRUE41
8Merc 240D 24.44146.7 623.693.19020.00 TRUEFALSE42
9Merc 230 22.84140.8 953.923.15022.90 TRUEFALSE42
18Fiat 128 32.44 78.7 664.082.20019.47 TRUE TRUE41
19Honda Civic 30.44 75.7 524.931.61518.52 TRUE TRUE42
20Toyota Corolla33.94 71.1 654.221.83519.90 TRUE TRUE41
21Toyota Corona 21.54120.1 973.702.46520.01 TRUEFALSE31
26Fiat X1-9 27.34 79.0 664.081.93518.90 TRUE TRUE41
27Porsche 914-2 26.04120.3 914.432.14016.70FALSE TRUE52
28Lotus Europa 30.44 95.11133.771.51316.90 TRUE TRUE52
32Volvo 142E 21.44121.01094.112.78018.60 TRUE TRUE42
In [36]:
#PBI mayor a 15000 dólares
orangeec[orangeec$GDP.PC>=15000,]
A data.frame: 7 × 13
CountryGDP.PCGDP.US.billGDP.Growth..Services...GDPCreat.Ind...GDPInflationUnemploymentX..pop.below.poverty.lineInternet.penetration...populationMedian.ageX..pop.25.54Education.invest...GDP
<chr><int><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
1Argentina 20900 637.72.960.93.825.7 8.125.793.131.739.385.9
4Brazil 156002055000.01.072.82.6 3.411.8 4.270.732.043.865.9
5Chile 24500 277.01.564.32.2 2.2 7.014.477.534.443.084.9
7Costa Rica16900 58.13.273.52.0 1.6 8.121.786.731.344.037.1
12Mexico 199001149000.02.064.07.4 6.0 3.646.265.028.340.815.3
14Panama 25400 61.85.482.06.3 0.9 5.523.069.729.240.353.2
17Uruguay 22400 58.43.168.81.0 6.2 7.3 9.788.235.039.344.4
In [37]:
# Aportan menos del 2% del Pib con la Eco Naranja
orangeec[orangeec$Creat.Ind...GDP<=2,]
A data.frame: 10 × 13
CountryGDP.PCGDP.US.billGDP.Growth..Services...GDPCreat.Ind...GDPInflationUnemploymentX..pop.below.poverty.lineInternet.penetration...populationMedian.ageX..pop.25.54Education.invest...GDP
<chr><int><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
NANA NA NA NA NA NA NA NA NA NA NA NA NA
NA.1NA NA NA NA NA NA NA NA NA NA NA NA NA
7Costa Rica16900 58.13.273.52.01.68.121.786.731.344.037.1
8Ecuador 11500102.32.756.92.00.44.621.579.927.739.595.0
NA.2NA NA NA NA NA NA NA NA NA NA NA NA NA
NA.3NA NA NA NA NA NA NA NA NA NA NA NA NA
NA.4NA NA NA NA NA NA NA NA NA NA NA NA NA
NA.5NA NA NA NA NA NA NA NA NA NA NA NA NA
16Peru 13300215.22.556.81.52.86.722.767.628.040.193.8
17Uruguay 22400 58.43.168.81.06.27.3 9.788.235.039.344.4
In [38]:
# Subsets
neworangeeg <- subset(orangeec, Internet.penetration...population > 80 & Education.invest...GDP >= 4.5)
In [39]:
neworangeeg
A data.frame: 3 × 13
CountryGDP.PCGDP.US.billGDP.Growth..Services...GDPCreat.Ind...GDPInflationUnemploymentX..pop.below.poverty.lineInternet.penetration...populationMedian.ageX..pop.25.54Education.invest...GDP
<chr><int><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
1Argentina 20900637.72.960.93.825.78.125.793.131.739.385.9
7Costa Rica16900 58.13.273.52.0 1.68.121.786.731.344.037.1
15Paraguay 9800 29.64.354.54.1 3.66.522.289.628.241.085.0
In [40]:
# Select lo utilizamos para seleccionar columnas
neworangeeg <- subset(orangeec, Internet.penetration...population > 80 & Education.invest...GDP >= 4.5, select = Creat.Ind...GDP)
neworangeeg
A data.frame: 3 × 1
Creat.Ind...GDP
<dbl>
13.8
72.0
154.1
In [41]:
neworangeeg <- subset(orangeec, Internet.penetration...population > 80 & Education.invest...GDP >= 4.5, select = c("Country", "Creat.Ind...GDP"))

neworangeeg
A data.frame: 3 × 2
CountryCreat.Ind...GDP
<chr><dbl>
1Argentina 3.8
7Costa Rica2.0
15Paraguay 4.1
In [42]:
# install.packages("plyr") si hiciera falta para usar la funcion rename(Tabla,c("nombre_antiguo"="nombre_actual"))
library("plyr")  # cargar la biblioteca plyr
rename(orangeec,c("Creat.Ind...GDP"="AporteEcNja"))
A data.frame: 17 × 13
CountryGDP.PCGDP.US.billGDP.Growth..Services...GDPAporteEcNjaInflationUnemploymentX..pop.below.poverty.lineInternet.penetration...populationMedian.ageX..pop.25.54Education.invest...GDP
<chr><int><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
Argentina 20900 637.72.960.93.825.7 8.125.793.131.739.385.9
Belize 8300 1854.00.862.2 NA 1.110.141.052.322.736.627.4
Bolivia 7500 37.14.250.0 NA 2.8 4.038.678.624.337.487.3
Brazil 156002055000.01.072.82.6 3.411.8 4.270.732.043.865.9
Chile 24500 277.01.564.32.2 2.2 7.014.477.534.443.084.9
Colombia 14500 309.21.861.43.3 4.310.528.063.230.041.914.5
Costa Rica 16900 58.13.273.52.0 1.6 8.121.786.731.344.037.1
Ecuador 11500 102.32.756.92.0 0.4 4.621.579.927.739.595.0
El Salvador 8900 28.02.464.9 NA 1.0 7.032.757.727.139.233.5
Guatemala 8100 75.72.863.2 NA 4.4 2.359.342.122.134.122.8
Honduras 5600 22.94.857.8 NA 3.9 5.929.638.223.036.635.9
Mexico 199001149000.02.064.07.4 6.0 3.646.265.028.340.815.3
Nicaragua 5800 13.74.950.8 NA 3.9 6.529.643.025.740.244.5
Panama 25400 61.85.482.06.3 0.9 5.523.069.729.240.353.2
Paraguay 9800 29.64.354.54.1 3.6 6.522.289.628.241.085.0
Peru 13300 215.22.556.81.5 2.8 6.722.767.628.040.193.8
Uruguay 22400 58.43.168.81.0 6.2 7.3 9.788.235.039.344.4

Clase 12: Factores, listas y primeras vistas al dataset¶

In [43]:
# **Factor:** Tipo de dato con variables categóricas.

# **head:** es una función que nos retorna los primeros elementos de un dataset, por defecto nos retorna los primeros 6.

# **tail:** función similar a head solamente que esta función nos retorna los últimos elementos.
In [44]:
# Además de poder visualizar un dataset con str podemos instalar el paquete dplyr: install.packages("dplyr"). 
# Una vez instalado usamos la función glimpse.

# Una lista es un vector genérico que puede contener objetos de todo tipo, en R para crear una lista 
# se debe llamar a la función list y pasarle como argumentos los elementos.
In [45]:
# Factor
Nivel_Curso <- c("Básico","Intermedio","Avanzado")
Nivel_Curso
  1. 'Básico'
  2. 'Intermedio'
  3. 'Avanzado'
In [46]:
# Primeras Filas con head
head(mtcars)
A data.frame: 6 × 12
modelmpgcyldisphpdratwtqsecvsamgearcarb
<chr><dbl><int><dbl><int><dbl><dbl><dbl><lgl><lgl><int><int>
1Mazda RX4 21.061601103.902.62016.46FALSE TRUE44
2Mazda RX4 Wag 21.061601103.902.87517.02FALSE TRUE44
3Datsun 710 22.84108 933.852.32018.61 TRUE TRUE41
4Hornet 4 Drive 21.462581103.083.21519.44 TRUEFALSE31
5Hornet Sportabout18.783601753.153.44017.02FALSEFALSE32
6Valiant 18.162251052.763.46020.22 TRUEFALSE31
In [47]:
head(orangeec)
A data.frame: 6 × 13
CountryGDP.PCGDP.US.billGDP.Growth..Services...GDPCreat.Ind...GDPInflationUnemploymentX..pop.below.poverty.lineInternet.penetration...populationMedian.ageX..pop.25.54Education.invest...GDP
<chr><int><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
1Argentina20900 637.72.960.93.825.7 8.125.793.131.739.385.9
2Belize 8300 1854.00.862.2 NA 1.110.141.052.322.736.627.4
3Bolivia 7500 37.14.250.0 NA 2.8 4.038.678.624.337.487.3
4Brazil 156002055000.01.072.82.6 3.411.8 4.270.732.043.865.9
5Chile 24500 277.01.564.32.2 2.2 7.014.477.534.443.084.9
6Colombia 14500 309.21.861.43.3 4.310.528.063.230.041.914.5
In [48]:
# últimas filas
tail(mtcars)
A data.frame: 6 × 12
modelmpgcyldisphpdratwtqsecvsamgearcarb
<chr><dbl><int><dbl><int><dbl><dbl><dbl><lgl><lgl><int><int>
27Porsche 914-2 26.04120.3 914.432.14016.7FALSETRUE52
28Lotus Europa 30.44 95.11133.771.51316.9 TRUETRUE52
29Ford Pantera L15.88351.02644.223.17014.5FALSETRUE54
30Ferrari Dino 19.76145.01753.622.77015.5FALSETRUE56
31Maserati Bora 15.08301.03353.543.57014.6FALSETRUE58
32Volvo 142E 21.44121.01094.112.78018.6 TRUETRUE42
In [49]:
# La función head() por defecto devuelve los 6 primeros valores, pero este puede ser configurable
# añadiendo un parámetro (ídem con tail):

head(orangeec, n = 3)
A data.frame: 3 × 13
CountryGDP.PCGDP.US.billGDP.Growth..Services...GDPCreat.Ind...GDPInflationUnemploymentX..pop.below.poverty.lineInternet.penetration...populationMedian.ageX..pop.25.54Education.invest...GDP
<chr><int><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
1Argentina20900 637.72.960.93.825.7 8.125.793.131.739.385.9
2Belize 83001854.00.862.2 NA 1.110.141.052.322.736.627.4
3Bolivia 7500 37.14.250.0 NA 2.8 4.038.678.624.337.487.3
In [ ]:
install.packages("dplyr")
library("dplyr")
In [51]:
# install.packages("dplyr")
# library("dplyr")
glimpse(orangeec) # vemos doubles and ints
Rows: 17
Columns: 13
$ Country                           <chr> "Argentina", "Belize", "Bolivia", "B…
$ GDP.PC                            <int> 20900, 8300, 7500, 15600, 24500, 145…
$ GDP.US.bill                       <dbl> 637.7, 1854.0, 37.1, 2055000.0, 277.…
$ GDP.Growth..                      <dbl> 2.9, 0.8, 4.2, 1.0, 1.5, 1.8, 3.2, 2…
$ Services...GDP                    <dbl> 60.9, 62.2, 50.0, 72.8, 64.3, 61.4, …
$ Creat.Ind...GDP                   <dbl> 3.8, NA, NA, 2.6, 2.2, 3.3, 2.0, 2.0…
$ Inflation                         <dbl> 25.7, 1.1, 2.8, 3.4, 2.2, 4.3, 1.6, …
$ Unemployment                      <dbl> 8.1, 10.1, 4.0, 11.8, 7.0, 10.5, 8.1…
$ X..pop.below.poverty.line         <dbl> 25.7, 41.0, 38.6, 4.2, 14.4, 28.0, 2…
$ Internet.penetration...population <dbl> 93.1, 52.3, 78.6, 70.7, 77.5, 63.2, …
$ Median.age                        <dbl> 31.7, 22.7, 24.3, 32.0, 34.4, 30.0, …
$ X..pop.25.54                      <dbl> 39.38, 36.62, 37.48, 43.86, 43.08, 4…
$ Education.invest...GDP            <dbl> 5.9, 7.4, 7.3, 5.9, 4.9, 4.5, 7.1, 5…
In [52]:
# Listas: Acá se puede menter de todo (vectores, matrices, dataframes, etc)
In [53]:
my_vector <- 1:8
my_vector
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
In [54]:
my_matrix <-matrix(1:9,ncol=3)
my_matrix
A matrix: 3 × 3 of type int
147
258
369
In [55]:
my_df <- mtcars[1:4,] # filas del 1 al 4 y todas las columnas
my_df
A data.frame: 4 × 12
modelmpgcyldisphpdratwtqsecvsamgearcarb
<chr><dbl><int><dbl><int><dbl><dbl><dbl><lgl><lgl><int><int>
1Mazda RX4 21.061601103.902.62016.46FALSE TRUE44
2Mazda RX4 Wag 21.061601103.902.87517.02FALSE TRUE44
3Datsun 710 22.84108 933.852.32018.61 TRUE TRUE41
4Hornet 4 Drive21.462581103.083.21519.44 TRUEFALSE31
In [56]:
# Insertamos todo lo anterior en una lista
my_list <- list(my_vector,my_matrix,my_df)
my_list
    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
  1. A matrix: 3 × 3 of type int
    147
    258
    369
  2. A data.frame: 4 × 12
    modelmpgcyldisphpdratwtqsecvsamgearcarb
    <chr><dbl><int><dbl><int><dbl><dbl><dbl><lgl><lgl><int><int>
    1Mazda RX4 21.061601103.902.62016.46FALSE TRUE44
    2Mazda RX4 Wag 21.061601103.902.87517.02FALSE TRUE44
    3Datsun 710 22.84108 933.852.32018.61 TRUE TRUE41
    4Hornet 4 Drive21.462581103.083.21519.44 TRUEFALSE31

Clase 13: EDA, Exploratory Data Analysis¶

EDA consiste en visualizar los datos antes de enfocarnos en las fórmulas estadísticas.

Recomendación: https://www.youtube.com/watch?v=W1_eCwuYkAI&t=316s

Pueden suceder casos donde datasets distintos muestran los mismos valores estadísticos, pero sus elementos en una gráfica son totalmente diferentes. Es por ello por lo que es importante visualizarlos antes.

Ejemplo:

El cuarteto de Anscombe comprende cuatro conjuntos de datos que tienen las mismas propiedades estadísticas, pero que evidentemente son distintas al inspeccionar sus gráficos respectivos.

Cada conjunto consiste de once puntos (x, y) y fueron construidos por el estadístico F. J. Anscombe. El cuarteto es una demostración de la importancia de mirar gráficamente un conjunto de datos antes de analizarlos.

image-2.png

Clase 14: Gráficas de dispersión e histogramas¶

Existen varios tipos de gráficas para visualizar la información al momento de hacer un EDA:

Gráfica de dispersión: los ejes solamente pueden ser valores numéricos y los puntos no se pueden unir.

Histograma: sirve para ver la distribución de las frecuencias de una variable, nos muestra lo que hay o lo que no hay en una distribución. Orden ascendente en el eje de ordenadas. No es un gráfico de barras. Variables numéricas.

Box plot: nos muestra 5 elementos claves en estadistica como el mínimo, el máximo, el primer cuartil, la mediana y el tercer cuartil.

image.png

Clase 15: Box Plot y su interpretación¶

Los 5 puntos clave en estadística descriptiva se pueden visualizar en el box plot:

  • Q1 Primer cuartil: es el piso de la caja o línea inferior.
  • Mediana: es la línea que se encuentra dentro de la caja.
  • Q3 Tercer cuartil: es el techo de la caja o línea superior.
  • Mínimo: la extensión inferior de la caja.
  • Máximo: la extensión superior de la caja.

image-3.png

image-5.png

KMZ, SHAPE, RASTER.

Clase 16: EDA con dataset - Gráficas de dispersion¶

Para realizar el EDA con una gráfica de dispersion dentro de R debemos utilizar la funcion plot, los argumentos que debemos pasarle son:

La información en el eje X y Y.

xlab: título para el eje x.

ylab: título para el eje y.

main: título de la gráfica.

In [57]:
# Observamos la relación de rendimiento de combustible respecto al numero de cilindros de los autos.
# plot(Dataset$VariableY ~ Dataset$VariableX)
plot(mtcars$mpg ~ mtcars$cyl,
    xlab = "cilindros",
    ylab = "millas por galón",
    main = "Cilindros / Millas por galón"
    )
In [58]:
# Observamos la correlación entre caballos de fuerza y distancia recorrida
plot(mtcars$mpg ~ mtcars$hp,
    xlab = "caballos de fuerza",
    ylab = "millas por galón",
    main = "Caballos de fuerza / Millas por galón"
    )
In [59]:
# Hay países que invierten en educacion hasta el 7% de su PIB y tienen  alto desempleo:
plot(orangeec$Unemployment ~ orangeec$Education.invest...GDP,
    xlab = "Inversión en educación [% PIB]",
    ylab = "Desempleo",
    main = "Desempleo / Inversión en Educación"
    )
In [60]:
# Aporte de la Economía Naranja al PIB
plot(orangeec$GDP.PC ~ orangeec$Creat.Ind...GDP,
    xlab = "Aporte de Economía Naranja al PIB [% PIB]",
    ylab = "PIB",
    main = "Aporte de Economía Naranja al PIB [% PIB]/ PIB"
    )

Clase 17 EDA con histogramas¶

Para realizar EDA con un histograma dentro de R debemos utilizar la función hist(), los argumentos que debemos pasar son:

  • la información en el eje X.
  • geom: describir el tipo de gráfica que se va a imprimir.
  • xlab: título para el eje x.
  • main: título de la gráfica.

Es necesario contar con el paquete ggplot2

In [61]:
install.packages("ggplot2")
package 'ggplot2' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\INGENIERO SALINA\AppData\Local\Temp\RtmpGCm48S\downloaded_packages
In [62]:
library(ggplot2) # Para cargar el paquete y dejarlo disponible para su uso luego de instalar la librería correspondiente.
In [63]:
qplot(
    mtcars$hp,
    geom = "histogram",
    xlab = "caballos de fuerza",
    main = "Carros según HP",
    binwidth = 50
    )
Warning message:
"`qplot()` was deprecated in ggplot2 3.4.0."
In [64]:
hist(
    mtcars$hp,
    xlab = "caballos de fuerza",
    main = "Carros según HP"
    )
In [65]:
ggplot(mtcars, aes(x = hp)) +
      geom_histogram(binwidth = 30) +
      labs(x = "Caballos de fuerza",
           y = "Cantidad de autos",
           title = "Hp / Cantidad de Autos") +
      theme(legend.position = "none") +
      theme(panel.background = element_blank(),
            panel.grid.major = element_blank(),
            panel.grid.minor = element_blank())

Opciones de ggplot.

  • aes(): contenido estético del gráfico. Es decir, la función le dará indicios a ggplot2 sobre cómo dibujar las formas y tamaños
  • fill: color de barra
  • color: contorno de barra
  • binwidth: ancho de barra
  • labs(): etiquetas del eje (x,y)
  • title: nombre del histograma
  • xlim: escalas en el eje x
  • theme(): color de fondo
In [66]:
ggplot()+
    geom_histogram(data=mtcars,
                   aes(x=hp),
                   fill="blue",
                   color="red",
                   binwidth=20 
                  ) +
                   labs(x = "Caballos de fuerza",
                        y = "Cantidad de autos",
                        title = "Hp / Cantidad de Autos") +
                   xlim(c(80,280))+
                   theme(legend.position = "none") +
                   theme(panel.background = element_blank(),
                   panel.grid.major = element_blank(),
                   panel.grid.minor = element_blank()
                         )
Warning message:
"Removed 6 rows containing non-finite values (`stat_bin()`)."
Warning message:
"Removed 2 rows containing missing values (`geom_bar()`)."

Clase 18 EDA: histogramas - ggplot2¶

In [67]:
# PIBs
ggplot()+
    geom_histogram(data=orangeec,
                   aes(x=GDP.PC),
                   fill="blue",
                   color="red",
                   binwidth=2000 
                  ) +
                   labs(x = "PIB per cápita",
                        y = "Cantidad de países",
                        title = "PIB per cápita en latam") +                   
                   theme(legend.position = "none") +
                   theme(panel.background = element_blank(),
                   panel.grid.major = element_blank(),
                   panel.grid.minor = element_blank()
                         )
In [68]:
# Observamos como solo 1 país obtiene el 7% del PIB mediante economía naranja.
ggplot()+
    geom_histogram(data=orangeec,
                   aes(x=Creat.Ind...GDP),
                   fill="blue",
                   color="red",
                   binwidth=1
                  ) +
                   labs(x = "Aporte de Ec.Naranja al PIB",
                        y = "Cantidad de países",
                        title = "Contrib de Ec Naranja en LATAM") +                   
                   theme(legend.position = "none") +
                   theme(panel.background = element_blank(),
                   panel.grid.major = element_blank(),
                   panel.grid.minor = element_blank()
                         )
Warning message:
"Removed 6 rows containing non-finite values (`stat_bin()`)."
In [69]:
# Penetración de Internet
ggplot()+
    geom_histogram(data=orangeec,
                   aes(x=Internet.penetration...population),
                   fill="red",
                   color="yellow",
                   binwidth=5
                  ) +
                    scale_x_continuous(breaks = seq(40, max(100), 5))
                    +
                   labs(x = "Penetración de Intenet como porcentaje de la población",
                        y = "Cantidad de países",
                        title = "Internet en LATAM") +                   
                   theme(legend.position = "none") +
                   theme(panel.background = element_blank(),
                   panel.grid.major = element_blank(),
                   panel.grid.minor = element_blank()
                         )
Error in +labs(x = "Penetración de Intenet como porcentaje de la población", : argumento no válido para un operador unitario
Traceback:

Clase 19: EDA - box plot- ggplot2¶

Para realizar EDA con un box plot dentro de R debemos utilizar la función boxplot, los argumentos que debemos pasarle son:

  • la información que vamos a explorar.
  • ylab: título para el eje y.
  • main: título de la gráfica.

También podemos usar ggplot2 para crear un Box Plot.

Revisando nuestro DataFrame vemos que un outlier es el Maserati de 335hp (es muy util usar los boxplots para encontrar outliers)

Recordar que para los boxplots siempre se debe cruzar una variable numérica en X y una categórica en Y

Nota: cuando tenemos cajas "achatadas" tenemos datos uniformes y en cajas "alargadas" datos inconsistentes

In [70]:
# bosplot nativo
boxplot(mtcars$hp,
       ylab = "Caballos de Fuerza",
       main = "Caballos de fuerza de coches mtcars")
In [71]:
## Boxplot con ggplot2
 # Dibujamos tres Boxplots con as.factor(cyl) el 4 6 y 8 los toma como etiqueta no como variable
ggplot(mtcars, 
          aes(x=as.factor(cyl), y=hp, fill=cyl))+
          geom_boxplot()+
          labs(x="cilindros", y="caballos de fuerza",
               title="Caballos de fuerza según cilindros en mtcars")+
          theme(legend.position = "none")+
          theme(panel.background = element_blank(),
                panel.grid.major = element_blank(),
                panel.grid.minor = element_blank())
In [72]:
## Boxplot con ggplot2

ggplot(mtcars, 
          aes(x=as.factor(cyl), y=hp, fill=cyl))+ # Dibujamos tres Boxplots
          geom_boxplot(alpha=0.6)+ # modificamos la claridad
          labs(x="cilindros", y="caballos de fuerza",
               title="Caballos de fuerza según cilindros en mtcars")+
          theme(legend.position = "none")+
          theme(panel.background = element_blank(),
                panel.grid.major = element_blank(),
                panel.grid.minor = element_blank())
In [73]:
# Renombrar los valores de la columna "am": true/Manual y false/Automático 
# para utilizar el nombre de la etiqueta inferior como un labelEncoding pero inverso).

# la transformación de los labels debe ser con c(1, 0) 
# ya que el dataset de mtcars en el campo am nos encontramos con 1 y 0, el comando a ejecutar es:

# mtcars$am <- factor(mtcars$am, levels = c(1, 0), labels = c('Manual', 'Automatico'))
In [74]:
mtcars <- read.csv("./mtcars.csv", header = TRUE)
mtcars$am <- factor(mtcars$am, levels = c(1,0), labels = c("Manual", "Automatico")) # Ajustamos etiquetas en el eje X

ggplot(mtcars, 
          aes(x=am, y=mpg, fill=am)) +
          geom_boxplot() +
          labs(x = "Tipo de caja de cambios", 
               y = "millas por galón",
               title = "Millas por galon segun tipo de caja-mtcars") +
          theme(legend.position = "none") +
          theme(panel.background = element_blank(),
          panel.grid.major = element_blank(),
          panel.grid.minor = element_blank())

Clase 20: EDA con dataset - box plot- ggplot2 - dplyr¶

Instalando el paquete Tidyverse no es necesario instalar dplyr y ggplot por separado. Este contiene estos dos paquetes, además de otros requeridos para hacer Data Science.

Libro de R: En estos ejercicios usan tidyverse en una serie de ejercicios.

Libro: https://arcruz0.github.io/libroadp/index.html

Tidyverse es una colección de paquetes diseñados para hacer DataScience. Todos los paquetes comparten una estructura y ‘grámatica’ similar.

Por ejemplo, incluye:

ggplot2: que lo vemos mucho en este curso, pero hay muchas capas adicionales que pueden agregarse.

dplyr: Provee un set de ‘verbos’ como mutate, select, filter, summarize, arrange, group_by, etc; que te permiten manipular y transformar tus datos (agregar nuevas columnas, métricas, eliminar columnas, etc).

readr: para importar bases de datos desde diferentes formatos como csv, tsv, fwf.

stringr: para manejo de cadenas de texto.

Pueden encontrar más detalle en: https://www.tidyverse.org/

In [75]:
## Boxplots Economía Naranja
# obtenemos la media de referencia para crear nuevas variables
economy  <- mean(orangeec$GDP.PC) #Promedio
economy
14052.9411764706
In [76]:
# mutamos (label encoding) el dataset con dplyr, la nueva columna se agrega al final de la tabla
orangeec <- orangeec %>%
  mutate(Strong_economy = ifelse(GDP.PC < economy,
                "Por debajo promedio pib per cápita",
                "Sobre-Arriba promedio pib per cápita"))
orangeec
A data.frame: 17 × 14
CountryGDP.PCGDP.US.billGDP.Growth..Services...GDPCreat.Ind...GDPInflationUnemploymentX..pop.below.poverty.lineInternet.penetration...populationMedian.ageX..pop.25.54Education.invest...GDPStrong_economy
<chr><int><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><chr>
Argentina 20900 637.72.960.93.825.7 8.125.793.131.739.385.9Sobre-Arriba promedio pib per cápita
Belize 8300 1854.00.862.2 NA 1.110.141.052.322.736.627.4Por debajo promedio pib per cápita
Bolivia 7500 37.14.250.0 NA 2.8 4.038.678.624.337.487.3Por debajo promedio pib per cápita
Brazil 156002055000.01.072.82.6 3.411.8 4.270.732.043.865.9Sobre-Arriba promedio pib per cápita
Chile 24500 277.01.564.32.2 2.2 7.014.477.534.443.084.9Sobre-Arriba promedio pib per cápita
Colombia 14500 309.21.861.43.3 4.310.528.063.230.041.914.5Sobre-Arriba promedio pib per cápita
Costa Rica 16900 58.13.273.52.0 1.6 8.121.786.731.344.037.1Sobre-Arriba promedio pib per cápita
Ecuador 11500 102.32.756.92.0 0.4 4.621.579.927.739.595.0Por debajo promedio pib per cápita
El Salvador 8900 28.02.464.9 NA 1.0 7.032.757.727.139.233.5Por debajo promedio pib per cápita
Guatemala 8100 75.72.863.2 NA 4.4 2.359.342.122.134.122.8Por debajo promedio pib per cápita
Honduras 5600 22.94.857.8 NA 3.9 5.929.638.223.036.635.9Por debajo promedio pib per cápita
Mexico 199001149000.02.064.07.4 6.0 3.646.265.028.340.815.3Sobre-Arriba promedio pib per cápita
Nicaragua 5800 13.74.950.8 NA 3.9 6.529.643.025.740.244.5Por debajo promedio pib per cápita
Panama 25400 61.85.482.06.3 0.9 5.523.069.729.240.353.2Sobre-Arriba promedio pib per cápita
Paraguay 9800 29.64.354.54.1 3.6 6.522.289.628.241.085.0Por debajo promedio pib per cápita
Peru 13300 215.22.556.81.5 2.8 6.722.767.628.040.193.8Por debajo promedio pib per cápita
Uruguay 22400 58.43.168.81.0 6.2 7.3 9.788.235.039.344.4Sobre-Arriba promedio pib per cápita
In [77]:
# boxplot
ggplot(orangeec, 
       aes(x=Strong_economy, 
           y=Creat.Ind...GDP,
           fill=Strong_economy))+
      geom_boxplot(alpha=0.5)+
      labs(x="Tipo de país", 
           y="Aporte de economía Naranja al pib",
           title="Aporte de economía naranja al pib en países latam con alto y bajo pib percapita")+
      theme(legend.position = "none")+
      theme(panel.background = element_blank(),
            panel.grid.major = element_blank(),
            panel.grid.minor = element_blank())
Warning message:
"Removed 6 rows containing non-finite values (`stat_boxplot()`)."
In [78]:
# Observamos como en los países con mayor Pib tienen índices de mayor penetración de internet siendo el mínimo el 70%.
ggplot(orangeec, aes(x=Strong_economy, y=`Internet.penetration...population`,
                     fill=Strong_economy))+
  geom_boxplot(alpha=0.4)+
  labs(x="Tipo de país", y="Penetración de internet(%)",
       title = "Penetración de internet en países Latam con
         alto y bajo pib per capita")+

  theme(legend.position = "none")+
  theme(panel.background = element_blank(),panel.grid.major=element_blank(),
        panel.grid.minor=element_blank())

Clase 21: EDA con gráficas de dispersión de más de 2 variables - ggplot2¶

In [79]:
# scatterplot mtcars
# relación hp - rendimiento
# gráfica de dispersion (scatterplot) usando ggplot
ggplot(mtcars, 
      aes(x=hp,y=mpg))+
      geom_point()+
      labs(x="caballos fuerza", 
           y="millas por galón",
           title="Relación caballos de fuerza y millas po galón")+
      theme(legend.position = "none")+
      theme(panel.background = element_blank(),
            panel.grid.major=element_blank(),
            panel.grid.minor=element_blank())
In [80]:
# relación  peso - potencia
ggplot(mtcars, aes(wt,hp))+
  geom_point()+
  labs(x="peso", y="potencia",
       title="Relación peso-potencia")+
  theme(legend.position = "none")+
  theme(panel.background = element_blank(),panel.grid.major=element_blank(),
        panel.grid.minor=element_blank())
In [81]:
# gráficas de puntos con 4 variables
# geom_point permite relacionar am con un color distintivo y el número de cilindros con el tamaño del punto en el scatter
# se incluyen las variables am como color y cyl como tamaño de las burbujas
# qsec: tiempo de cuarto de milla
ggplot(mtcars, aes(x=hp,y=qsec))+
  geom_point(aes(color=am,size=cyl))+  
  labs(x="caballos de fuerza", 
       y="tiempo en 1/4 millas",
       title ="caballos-velocidad según cilindros y tipo de transmisión")

Clase 22: Gráficas de dispersión con más de 2 variables - ggplot2 - plotly¶

In [82]:
## Scatterplots para economía naranja
ggplot(orangeec, aes(x=Internet.penetration...population,y=Creat.Ind...GDP))+
      geom_point(aes(color=Strong_economy,size=GDP.Growth..))+
      labs(x="Penetracion Internet",
           y="Aporte economía naranja PIB",
           title ="Internet y aporte economía naranja segun economía y crecimiento PIB ")
Warning message:
"Removed 6 rows containing missing values (`geom_point()`)."
In [83]:
## Scatterplots para economía naranja
ggplot(orangeec, aes(x=Internet.penetration...population,y=Creat.Ind...GDP))+
      geom_point(aes(color=factor(Strong_economy),size=GDP.Growth..))+
      labs(x="Penetracion Internet",
           y="Aporte economía naranja PIB",
           title ="Internet y aporte economía naranja segun economía y crecimiento PIB ")
Warning message:
"Removed 6 rows containing missing values (`geom_point()`)."
In [84]:
## Reto
ggplot(orangeec, aes(Education.invest...GDP,Unemployment))+
  geom_point(aes(color=Strong_economy,size=X..pop.below.poverty.line))+
  labs(x="Inversion en educacion", y="Desempleo",
       title ="Inversion en educacion % GDP - Desempleo")
In [ ]:
# Scatterplot interactivo
# Instalamos la librería plotly (también disponible para python y otros lenguajes)
install.packages("plotly")
library("plotly")
In [86]:
## Scatterplot Interactivo
my_graph <- ggplot(orangeec, aes(x=Internet.penetration...population,
                                 y=Creat.Ind...GDP, 
                                 label= row.names(orangeec)))+
          geom_point(aes(color=Strong_economy))+
          labs(x="Penetración de Internet", 
               y="Aporte de economía naranja al PIB",
               title ="Penetración de Internet y aporte de la economía naranja al crecimiento PIB")
my_graph
Warning message:
"Removed 6 rows containing missing values (`geom_point()`)."
In [87]:
my_iplot = ggplotly(my_graph)
my_iplot

Clase 23 Buscando correlaciones con pairs¶

La función pairs() nos permite cruzar todas las variables del dataset a modo de tabla donde el eje X de una gráfica corresponde a la columna donde se encuentra, y el eje Y a la fila.

  • select(): para seleccionar variables o columnas.
  • filter(): para filtrar datos de un dataset, retorna las filas que pasen el filtro.

Uso de Pairs y select¶

En ambas imágenes podemos observar la correlacion de los datos, a diferencia del HeatMap de pandas, matplotlib y seaborn que es numérico, en la diagonal tenemos el nombre de las variables y podemos identificar fácilmente correlaciones positivas, negativas y la tendencia de las mismas.

In [88]:
# Para evitar el error:
# Error in pairs.default(newdata): non-numeric argument to 'pairs'
# Traceback:

# 1. pairs(newdata)
# 2. pairs.default(newdata)
# 3. stop("non-numeric argument to 'pairs'")
numeric_cols <- sapply(mtcars, is.numeric)
pairs(mtcars[, numeric_cols])
In [89]:
# correlación básica
pairs(mtcars[,2:6]) # todas las filas y columnas de la 2 a la 6
In [90]:
# Seleccionando las columnas de interés  y creando nuevo subset

library("dplyr")

newdata <- subset(mtcars, select=c(1,6:7,10,11))
numeric_cols <- sapply(newdata, is.numeric)
pairs(newdata[, numeric_cols])
In [91]:
#  Seleccionando las columnas de interés  y creando nuevo subset
newdata <- subset(mtcars, select=c(2,7:8,10,11,12))
pairs(newdata)

# de manera negativa
newdata <- subset(mtcars[,-c(1,3,4,5,6,9,10)])
pairs(newdata)
In [92]:
# Uso de Pairs y filter
Eficientes <- filter(mtcars, mpg >= 30)
Eficientes
A data.frame: 4 × 12
modelmpgcyldisphpdratwtqsecvsamgearcarb
<chr><dbl><int><dbl><int><dbl><dbl><dbl><int><fct><int><int>
Fiat 128 32.4478.7 664.082.20019.471Manual41
Honda Civic 30.4475.7 524.931.61518.521Manual42
Toyota Corolla33.9471.1 654.221.83519.901Manual41
Lotus Europa 30.4495.11133.771.51316.901Manual52
In [93]:
pairs(Eficientes[,2:6])
In [94]:
# Usando str_dect
install.packages("stringr")
library("stringr")
package 'stringr' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\INGENIERO SALINA\AppData\Local\Temp\RtmpGCm48S\downloaded_packages
In [95]:
# Filtramos todos los autos mercedes usando str_dect
# detecta "merc" en la columna model
merc <- mtcars %>%
  filter(str_detect(model, "Merc"))
merc
A data.frame: 7 × 12
modelmpgcyldisphpdratwtqsecvsamgearcarb
<chr><dbl><int><dbl><int><dbl><dbl><dbl><int><fct><int><int>
Merc 240D 24.44146.7 623.693.1920.01Automatico42
Merc 230 22.84140.8 953.923.1522.91Automatico42
Merc 280 19.26167.61233.923.4418.31Automatico44
Merc 280C 17.86167.61233.923.4418.91Automatico44
Merc 450SE 16.48275.81803.074.0717.40Automatico33
Merc 450SL 17.38275.81803.073.7317.60Automatico33
Merc 450SLC15.28275.81803.073.7818.00Automatico33
In [96]:
pairs(merc[,2:6])

Clase 24: Correlaciones entre variables, función cor¶

"La correlación no implica causalidad"¶

Recordemos que la correlación se mueve entre -1 (negativa), 0 (no hay correlacion) y 1 (positiva).

In [97]:
# forma gráfica
pairs(merc[,2:6])
In [98]:
# forma numérica
cor(merc[,2:6])
A matrix: 5 × 5 of type dbl
mpgcyldisphpdrat
mpg 1.0000000-0.9446257-0.8274252-0.9372613 0.6466996
cyl-0.9446257 1.0000000 0.9487621 0.9771820-0.8257675
disp-0.8274252 0.9487621 1.0000000 0.9420908-0.9583580
hp-0.9372613 0.9771820 0.9420908 1.0000000-0.8107208
drat 0.6466996-0.8257675-0.9583580-0.8107208 1.0000000
In [99]:
# forma gráfica
pairs(newdata)

# forma numérica
cor(newdata)

cor(merc[,2:6])

# Ratificamos la correlación de forma numérica de como los vehículos recorren menos millas al aumentar el numero de cilindros.
A matrix: 5 × 5 of type dbl
mpgwtqsecgearcarb
mpg 1.0000000-0.8676594 0.4186840 0.4802848-0.5509251
wt-0.8676594 1.0000000-0.1747159-0.5832870 0.4276059
qsec 0.4186840-0.1747159 1.0000000-0.2126822-0.6562492
gear 0.4802848-0.5832870-0.2126822 1.0000000 0.2740728
carb-0.5509251 0.4276059-0.6562492 0.2740728 1.0000000
A matrix: 5 × 5 of type dbl
mpgcyldisphpdrat
mpg 1.0000000-0.9446257-0.8274252-0.9372613 0.6466996
cyl-0.9446257 1.0000000 0.9487621 0.9771820-0.8257675
disp-0.8274252 0.9487621 1.0000000 0.9420908-0.9583580
hp-0.9372613 0.9771820 0.9420908 1.0000000-0.8107208
drat 0.6466996-0.8257675-0.9583580-0.8107208 1.0000000

Clase 25: Correlaciones con pairs¶

Revisamos la correlación del Aporte de la economía naranja respecto a las otras variables.

In [100]:
cor(orangeec[, c(2, 11)])

pairs(orangeec[, c(2, 11)])

ggplot(orangeec, aes(x= GDP.PC, y= Median.age, colour="blue", label=Country))+
  geom_point() +geom_text(aes(label=Country),hjust=0, vjust=0)+
  theme(legend.position = "none")+
  theme(panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())
A matrix: 2 × 2 of type dbl
GDP.PCMedian.age
GDP.PC1.00000000.8193096
Median.age0.81930961.0000000
In [101]:
pairs(orangeec[,2:6])
In [102]:
newdata <- subset(orangeec, select=c(5,6,10,11,12,13))
pairs(newdata)

Clase 26: Confirmando correlaciones con cor()¶

Observamos los valores NA en algunas variables, pero necesitamos números en todas las celdas, esto lo solucionamos pasando use="complete.obs" como parámetro adicional a cor.

In [103]:
cor(orangeec[,2:6])
A matrix: 5 × 5 of type dbl
GDP.PCGDP.US.billGDP.Growth..Services...GDPCreat.Ind...GDP
GDP.PC 1.0000000 0.1680323-0.1611431 0.6733943NA
GDP.US.bill 0.1680323 1.0000000-0.4213369 0.3039234NA
GDP.Growth..-0.1611431-0.4213369 1.0000000-0.1430906NA
Services...GDP 0.6733943 0.3039234-0.1430906 1.0000000NA
Creat.Ind...GDP NA NA NA NA 1
In [104]:
cor(orangeec[,2:6],use="complete.obs") # usar solo las observaciones que estén completas
A matrix: 5 × 5 of type dbl
GDP.PCGDP.US.billGDP.Growth..Services...GDPCreat.Ind...GDP
GDP.PC 1.00000000-0.04987362 0.11868690.64375200.2606328
GDP.US.bill-0.04987362 1.00000000-0.52548900.25529860.2421848
GDP.Growth.. 0.11868685-0.52548898 1.00000000.25520480.3124484
Services...GDP 0.64375196 0.25529859 0.25520481.00000000.2201699
Creat.Ind...GDP 0.26063277 0.24218479 0.31244840.22016991.0000000

Corroboramos que el insight entre Services % GDP y GDP PC.

Observamos como la parte gráfica nos indica algunas correlaciones que aparentemente son negativas o positivas pero la parte matemática nos permite identificar el grado en que alguna de ellas no sigue la tendencia esperada.

In [105]:
cor(orangeec[,5:10],use="complete.obs")
A matrix: 6 × 6 of type dbl
Services...GDPCreat.Ind...GDPInflationUnemploymentX..pop.below.poverty.lineInternet.penetration...population
Services...GDP 1.0000000 0.2201699-0.1985176 0.17703222-0.2534107-0.14530602
Creat.Ind...GDP 0.2201699 1.0000000 0.1189514-0.41885405 0.7072581-0.34351645
Inflation-0.1985176 0.1189514 1.0000000 0.14179995 0.1702550 0.44593550
Unemployment 0.1770322-0.4188541 0.1418000 1.00000000-0.5693572-0.02534538
X..pop.below.poverty.line-0.2534107 0.7072581 0.1702550-0.56935718 1.0000000-0.30802896
Internet.penetration...population-0.1453060-0.3435164 0.4459355-0.02534538-0.3080290 1.00000000

Clase 27: Peligros del promedio, Desviación estándar¶

Conceptos:

  • Desviación estándar: es una medida de dispersión, nos indica cuánto pueden alejarse los valores respecto al promedio (media). Es útil para determinar el rango en que puede moverse una determinada variable. Es adimencional.

(útil para determinar las probabilidades de que un evento ocurra).

Podremos encontrar casos donde dos grupos de datos distintos tengan el mismo promedio, pero sus datos son muy diferentes uno del otro. No es lo mismo un grupo de datos donde su desviación es menor a 1, que aquel donde sus datos tienen una desviación de 4 o 6 puntos.

Ejemplo:

Los datos están muy desviados del promedio, pero como sabemos que tanto es bueno, malo, mucho o poco? para ello usamos el coeficiente de variación

  • Coeficiente de variación: este expresa la desviación estándar como porcentaje de la media, mostrando una mejor interpretación porcentual del grado de variabilidad que la desviación estándar (que tanto estamos alejados del promedio).

  • La formula del coeficiente de variación es:

$$(desviación estándar/promedio) * 100 = coeficiente de variación$$

Si el coeficiente es mayor al 25% entonces los datos no son homogéneos, varían mucho, si es menor podemos tomar la decision por promedio.

Dentro de R podemos sacar la desviación estándar con la función sd() y el promedio con mean().

In [106]:
# promedio de millas por galón
prom <- mean(mtcars$mpg)
prom

# desviacion estándar
desv <- sd(mtcars$mpg)
desv

## calculamos el coeficiente
CoefVar <- (desv/prom)*100
CoefVar

maximo <- max(mtcars$mpg)
maximo

minimo <- min(mtcars$mpg)
minimo
20.090625
6.0269480520891
29.9988081609661
33.9
10.4

Clase 28: Eliminando NA's para hacer los cálculos¶

Vamos a ver que tanto están desviados nuestros datos del promedio en el dataset de Economía naranja.

Al momento de sacar el promedio de nuestro dataset orangeec encontramos variables que tienen valores NA, para que estos no afecten nuestro cálculo solamente debemos añadir como argumento na.rm=TRUE.

El eliminar los NA del dataset puede ser contraproducente y puede generar Sesgo. En los entornos productivos es mejor aplicar técnicas de imputación de datos y esa directriz nos la puede dar la industria. Por ejemplo una técnica de imputación es remplazar los valores NA por el valor promedio de la variable, otro ejemplo es remplazar los NA por el valor que más se repite en la variable.

In [107]:
summary(orangeec)

# promedio
prom <- mean(orangeec$Internet.penetration...population)
prom

# desviacion estándar
desv <- sd(orangeec$Internet.penetration...population)
desv

## calculamos el coeficiente de desviación
CoefVar <- (desv/prom)*100
CoefVar
   Country              GDP.PC       GDP.US.bill         GDP.Growth..  
 Length:17          Min.   : 5600   Min.   :     13.7   Min.   :0.800  
 Class :character   1st Qu.: 8300   1st Qu.:     37.1   1st Qu.:2.000  
 Mode  :character   Median :13300   Median :     75.7   Median :2.800  
                    Mean   :14053   Mean   : 188693.0   Mean   :2.959  
                    3rd Qu.:19900   3rd Qu.:    309.2   3rd Qu.:4.200  
                    Max.   :25400   Max.   :2055000.0   Max.   :5.400  
                                                                       
 Services...GDP  Creat.Ind...GDP   Inflation       Unemployment   
 Min.   :50.00   Min.   :1.000   Min.   : 0.400   Min.   : 2.300  
 1st Qu.:56.90   1st Qu.:2.000   1st Qu.: 1.600   1st Qu.: 5.500  
 Median :62.20   Median :2.600   Median : 3.400   Median : 6.700  
 Mean   :62.64   Mean   :3.291   Mean   : 4.365   Mean   : 6.794  
 3rd Qu.:64.90   3rd Qu.:3.950   3rd Qu.: 4.300   3rd Qu.: 8.100  
 Max.   :82.00   Max.   :7.400   Max.   :25.700   Max.   :11.800  
                 NA's   :6                                        
 X..pop.below.poverty.line Internet.penetration...population   Median.age   
 Min.   : 4.20             Min.   :38.20                     Min.   :22.10  
 1st Qu.:21.70             1st Qu.:57.70                     1st Qu.:25.70  
 Median :25.70             Median :69.70                     Median :28.20  
 Mean   :27.65             Mean   :68.42                     Mean   :28.28  
 3rd Qu.:32.70             3rd Qu.:79.90                     3rd Qu.:31.30  
 Max.   :59.30             Max.   :93.10                     Max.   :35.00  
                                                                            
  X..pop.25.54   Education.invest...GDP Strong_economy    
 Min.   :34.12   Min.   :2.800          Length:17         
 1st Qu.:39.23   1st Qu.:4.400          Class :character  
 Median :40.19   Median :5.000          Mode  :character  
 Mean   :39.88   Mean   :5.082                            
 3rd Qu.:41.08   3rd Qu.:5.900                            
 Max.   :44.03   Max.   :7.400                            
                                                          
68.4176470588235
17.2741944564037
25.2481562856902
In [108]:
# Eliminando los NA's para hacer los cálculos.
# Usando Creative Industries GDP

# Observamos al correr summary que tenemos 6 NA (missing values)
# Observamos una desviacion del 61%
# Para este ejemplo en especifico el promedio esta alejado de los datos, 
# es mejor apoyarnos en la mediana o en los quartiles y no en el promedio.

# promedio
prom <- mean(orangeec$Creat.Ind...GDP)
prom

# desviacion estándar
desv <- sd(orangeec$Creat.Ind...GDP)
desv

## calculamos el coeficiente de desviación
CoefVar <- (desv/prom)*100
CoefVar

#--------------------------------------------------------------- na.rm = TRUE

# promedio
prom <- mean(orangeec$Creat.Ind...GDP, na.rm=TRUE)
prom

# desviacion estándar
desv <- sd(orangeec$Creat.Ind...GDP, na.rm=TRUE)
desv

## calculamos el coeficiente de desviación
CoefVar <- (desv/prom)*100
CoefVar
<NA>
<NA>
<NA>
3.29090909090909
2.00771240243943
61.0078354332422

Clase 29: Estadística y visualización aplicada al análisis de datos de mercadeo¶

Esta clase es una lectura de uno de los artículos de la profesora Sonia Ardila: link

Clase 30: Generando tablas, filtrando y seleccionando datos. dplyr-Parte 1¶

In [109]:
### Clase 30 Generando tablas, filtrando y seleccionando datos - dplyr-Parte 1
mtcars <- read.csv("./mtcars.csv", header = TRUE)

# Promedio de millas por galón
eficientes <- mean(mtcars$mpg)
eficientes


mtcars <- mtcars %>%
  mutate(Mas_eficientes=ifelse(mpg<eficientes,
                    "bajo promedio",
                    "en o sobre promedio"))
20.090625
In [110]:
columnas_deseadas <- subset(mtcars, select = c(model, mpg, Mas_eficientes))
head(columnas_deseadas)
A data.frame: 6 × 3
modelmpgMas_eficientes
<chr><dbl><chr>
1Mazda RX4 21.0en o sobre promedio
2Mazda RX4 Wag 21.0en o sobre promedio
3Datsun 710 22.8en o sobre promedio
4Hornet 4 Drive 21.4en o sobre promedio
5Hornet Sportabout18.7bajo promedio
6Valiant 18.1bajo promedio
In [111]:
# Agregando mas veloces
Mas_veloces <- mtcars[mtcars$qsec<16,]
Mas_veloces
A data.frame: 5 × 13
modelmpgcyldisphpdratwtqsecvsamgearcarbMas_eficientes
<chr><dbl><int><dbl><int><dbl><dbl><dbl><int><int><int><int><chr>
7Duster 360 14.383602453.213.5715.840034bajo promedio
24Camaro Z28 13.383502453.733.8415.410034bajo promedio
29Ford Pantera L15.883512644.223.1714.500154bajo promedio
30Ferrari Dino 19.761451753.622.7715.500156bajo promedio
31Maserati Bora 15.083013353.543.5714.600158bajo promedio
In [112]:
mtcars <- mtcars %>%
  mutate(Velocidad_cuarto_milla=ifelse(qsec < 16,
                               "Menos 16 segundos",
                               "Mas de 16 segundos"))
In [113]:
# Cambiamos peso a kilos
mtcars <-  mtcars %>%
  mutate(Peso_kilos=(wt/2)*1000)

#
mtcars <-  mtcars %>%
  mutate(Peso=ifelse(Peso_kilos <= 1500,
                     "Livianos",
                     "Pesados"))
head(mtcars)
A data.frame: 6 × 16
modelmpgcyldisphpdratwtqsecvsamgearcarbMas_eficientesVelocidad_cuarto_millaPeso_kilosPeso
<chr><dbl><int><dbl><int><dbl><dbl><dbl><int><int><int><int><chr><chr><dbl><chr>
1Mazda RX4 21.061601103.902.62016.460144en o sobre promedioMas de 16 segundos1310.0Livianos
2Mazda RX4 Wag 21.061601103.902.87517.020144en o sobre promedioMas de 16 segundos1437.5Livianos
3Datsun 710 22.84108 933.852.32018.611141en o sobre promedioMas de 16 segundos1160.0Livianos
4Hornet 4 Drive 21.462581103.083.21519.441031en o sobre promedioMas de 16 segundos1607.5Pesados
5Hornet Sportabout18.783601753.153.44017.020032bajo promedio Mas de 16 segundos1720.0Pesados
6Valiant 18.162251052.763.46020.221031bajo promedio Mas de 16 segundos1730.0Pesados

Clase 31: Generando tablas, filtrando y seleccionando datos - dplyr-Parte 2¶

In [114]:
# Creando nuevas variables
# Con mutate creamos nuevas columnas y sus variables correspondientes fila a fila
orangeec <-  orangeec %>%
              mutate(Crecimiento_GPD = ifelse(GDP.Growth.. >= 2.5,
                     "2.5% o más",
                     "Menos 2.5"))
In [115]:
orangeec <-  orangeec %>%
  mutate(Anaranjados = ifelse(Creat.Ind...GDP >= 2.5,
                                  "Mas anaranjados",
                                  "Menos anaranjados"))
In [116]:
orangeec %>%
      arrange(desc(Creat.Ind...GDP))
A data.frame: 17 × 16
CountryGDP.PCGDP.US.billGDP.Growth..Services...GDPCreat.Ind...GDPInflationUnemploymentX..pop.below.poverty.lineInternet.penetration...populationMedian.ageX..pop.25.54Education.invest...GDPStrong_economyCrecimiento_GPDAnaranjados
<chr><int><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><chr><chr><chr>
Mexico 199001149000.02.064.07.4 6.0 3.646.265.028.340.815.3Sobre-Arriba promedio pib per cápitaMenos 2.5 Mas anaranjados
Panama 25400 61.85.482.06.3 0.9 5.523.069.729.240.353.2Sobre-Arriba promedio pib per cápita2.5% o másMas anaranjados
Paraguay 9800 29.64.354.54.1 3.6 6.522.289.628.241.085.0Por debajo promedio pib per cápita 2.5% o másMas anaranjados
Argentina 20900 637.72.960.93.825.7 8.125.793.131.739.385.9Sobre-Arriba promedio pib per cápita2.5% o másMas anaranjados
Colombia 14500 309.21.861.43.3 4.310.528.063.230.041.914.5Sobre-Arriba promedio pib per cápitaMenos 2.5 Mas anaranjados
Brazil 156002055000.01.072.82.6 3.411.8 4.270.732.043.865.9Sobre-Arriba promedio pib per cápitaMenos 2.5 Mas anaranjados
Chile 24500 277.01.564.32.2 2.2 7.014.477.534.443.084.9Sobre-Arriba promedio pib per cápitaMenos 2.5 Menos anaranjados
Costa Rica 16900 58.13.273.52.0 1.6 8.121.786.731.344.037.1Sobre-Arriba promedio pib per cápita2.5% o másMenos anaranjados
Ecuador 11500 102.32.756.92.0 0.4 4.621.579.927.739.595.0Por debajo promedio pib per cápita 2.5% o másMenos anaranjados
Peru 13300 215.22.556.81.5 2.8 6.722.767.628.040.193.8Por debajo promedio pib per cápita 2.5% o másMenos anaranjados
Uruguay 22400 58.43.168.81.0 6.2 7.3 9.788.235.039.344.4Sobre-Arriba promedio pib per cápita2.5% o másMenos anaranjados
Belize 8300 1854.00.862.2 NA 1.110.141.052.322.736.627.4Por debajo promedio pib per cápita Menos 2.5 NA
Bolivia 7500 37.14.250.0 NA 2.8 4.038.678.624.337.487.3Por debajo promedio pib per cápita 2.5% o másNA
El Salvador 8900 28.02.464.9 NA 1.0 7.032.757.727.139.233.5Por debajo promedio pib per cápita Menos 2.5 NA
Guatemala 8100 75.72.863.2 NA 4.4 2.359.342.122.134.122.8Por debajo promedio pib per cápita 2.5% o másNA
Honduras 5600 22.94.857.8 NA 3.9 5.929.638.223.036.635.9Por debajo promedio pib per cápita 2.5% o másNA
Nicaragua 5800 13.74.950.8 NA 3.9 6.529.643.025.740.244.5Por debajo promedio pib per cápita 2.5% o másNA
In [117]:
TopNaranjas <-  orangeec %>%
                filter(Country %in% c("Mexico", "Panama", "Argentina","Colombia", "Brazil"))
TopNaranjas
A data.frame: 5 × 16
CountryGDP.PCGDP.US.billGDP.Growth..Services...GDPCreat.Ind...GDPInflationUnemploymentX..pop.below.poverty.lineInternet.penetration...populationMedian.ageX..pop.25.54Education.invest...GDPStrong_economyCrecimiento_GPDAnaranjados
<chr><int><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><chr><chr><chr>
Argentina20900 637.72.960.93.825.7 8.125.793.131.739.385.9Sobre-Arriba promedio pib per cápita2.5% o másMas anaranjados
Brazil 156002055000.01.072.82.6 3.411.8 4.270.732.043.865.9Sobre-Arriba promedio pib per cápitaMenos 2.5 Mas anaranjados
Colombia 14500 309.21.861.43.3 4.310.528.063.230.041.914.5Sobre-Arriba promedio pib per cápitaMenos 2.5 Mas anaranjados
Mexico 199001149000.02.064.07.4 6.0 3.646.265.028.340.815.3Sobre-Arriba promedio pib per cápitaMenos 2.5 Mas anaranjados
Panama 25400 61.85.482.06.3 0.9 5.523.069.729.240.353.2Sobre-Arriba promedio pib per cápita2.5% o másMas anaranjados

Clase 32: Viendo más información con facet wrap - Parte 1¶

Vamos a hacer un scatterplot de mtcars con 3 variables, con los ajustes que hemos hecho y algunos adicionales.

A traves de facet wrap podemos separar nuestra gráfica en varios cuadrantes, nuestro dataset "mas_pesados" en este caso tiene 4 modelos, por lo cual genera 4 gráficas donde podemos visualizar ahora 3 variables, los modelos, los mpg y los hp para cada vehículo.

In [118]:
# Ranking
mtcars %>%
  arrange(desc(Peso_kilos))
A data.frame: 32 × 16
modelmpgcyldisphpdratwtqsecvsamgearcarbMas_eficientesVelocidad_cuarto_millaPeso_kilosPeso
<chr><dbl><int><dbl><int><dbl><dbl><dbl><int><int><int><int><chr><chr><dbl><chr>
Lincoln Continental10.48460.02153.005.42417.820034bajo promedio Mas de 16 segundos2712.0Pesados
Chrysler Imperial 14.78440.02303.235.34517.420034bajo promedio Mas de 16 segundos2672.5Pesados
Cadillac Fleetwood 10.48472.02052.935.25017.980034bajo promedio Mas de 16 segundos2625.0Pesados
Merc 450SE 16.48275.81803.074.07017.400033bajo promedio Mas de 16 segundos2035.0Pesados
Pontiac Firebird 19.28400.01753.083.84517.050032bajo promedio Mas de 16 segundos1922.5Pesados
Camaro Z28 13.38350.02453.733.84015.410034bajo promedio Menos 16 segundos 1920.0Pesados
Merc 450SLC 15.28275.81803.073.78018.000033bajo promedio Mas de 16 segundos1890.0Pesados
Merc 450SL 17.38275.81803.073.73017.600033bajo promedio Mas de 16 segundos1865.0Pesados
Duster 360 14.38360.02453.213.57015.840034bajo promedio Menos 16 segundos 1785.0Pesados
Maserati Bora 15.08301.03353.543.57014.600158bajo promedio Menos 16 segundos 1785.0Pesados
Dodge Challenger 15.58318.01502.763.52016.870032bajo promedio Mas de 16 segundos1760.0Pesados
Valiant 18.16225.01052.763.46020.221031bajo promedio Mas de 16 segundos1730.0Pesados
Hornet Sportabout 18.78360.01753.153.44017.020032bajo promedio Mas de 16 segundos1720.0Pesados
Merc 280 19.26167.61233.923.44018.301044bajo promedio Mas de 16 segundos1720.0Pesados
Merc 280C 17.86167.61233.923.44018.901044bajo promedio Mas de 16 segundos1720.0Pesados
AMC Javelin 15.28304.01503.153.43517.300032bajo promedio Mas de 16 segundos1717.5Pesados
Hornet 4 Drive 21.46258.01103.083.21519.441031en o sobre promedioMas de 16 segundos1607.5Pesados
Merc 240D 24.44146.7 623.693.19020.001042en o sobre promedioMas de 16 segundos1595.0Pesados
Ford Pantera L 15.88351.02644.223.17014.500154bajo promedio Menos 16 segundos 1585.0Pesados
Merc 230 22.84140.8 953.923.15022.901042en o sobre promedioMas de 16 segundos1575.0Pesados
Mazda RX4 Wag 21.06160.01103.902.87517.020144en o sobre promedioMas de 16 segundos1437.5Livianos
Volvo 142E 21.44121.01094.112.78018.601142en o sobre promedioMas de 16 segundos1390.0Livianos
Ferrari Dino 19.76145.01753.622.77015.500156bajo promedio Menos 16 segundos 1385.0Livianos
Mazda RX4 21.06160.01103.902.62016.460144en o sobre promedioMas de 16 segundos1310.0Livianos
Toyota Corona 21.54120.1 973.702.46520.011031en o sobre promedioMas de 16 segundos1232.5Livianos
Datsun 710 22.84108.0 933.852.32018.611141en o sobre promedioMas de 16 segundos1160.0Livianos
Fiat 128 32.44 78.7 664.082.20019.471141en o sobre promedioMas de 16 segundos1100.0Livianos
Porsche 914-2 26.04120.3 914.432.14016.700152en o sobre promedioMas de 16 segundos1070.0Livianos
Fiat X1-9 27.34 79.0 664.081.93518.901141en o sobre promedioMas de 16 segundos 967.5Livianos
Toyota Corolla 33.94 71.1 654.221.83519.901141en o sobre promedioMas de 16 segundos 917.5Livianos
Honda Civic 30.44 75.7 524.931.61518.521142en o sobre promedioMas de 16 segundos 807.5Livianos
Lotus Europa 30.44 95.11133.771.51316.901152en o sobre promedioMas de 16 segundos 756.5Livianos
In [119]:
# Los ordeno
mtcars_orderby_pesados<-mtcars %>% arrange(desc(Peso_kilos))
# Hago un filter de los 4 primeros
Mas_pesados  <- filter(mtcars_orderby_pesados[1:4,])
Mas_pesados
A data.frame: 4 × 16
modelmpgcyldisphpdratwtqsecvsamgearcarbMas_eficientesVelocidad_cuarto_millaPeso_kilosPeso
<chr><dbl><int><dbl><int><dbl><dbl><dbl><int><int><int><int><chr><chr><dbl><chr>
Lincoln Continental10.48460.02153.005.42417.820034bajo promedioMas de 16 segundos2712.0Pesados
Chrysler Imperial 14.78440.02303.235.34517.420034bajo promedioMas de 16 segundos2672.5Pesados
Cadillac Fleetwood 10.48472.02052.935.25017.980034bajo promedioMas de 16 segundos2625.0Pesados
Merc 450SE 16.48275.81803.074.07017.400033bajo promedioMas de 16 segundos2035.0Pesados
In [120]:
# Vemos el efecto de las transformaciones graficando
ggplot(Mas_pesados, 
       aes(x=hp,y=mpg))+
       geom_point()+
       facet_wrap(~model)
#facet_wrap dibuja un cuadrante para cada modelo

Clase 33: Viendo mas información con facet wrap - Parte 2¶

Vamos a visualizar los países que mas aportan al pib desde su economía naranja.

Podemos observar la penetración de internet y el porcentaje de aporte de los servicios del país a su PIB

In [121]:
# Instalamos RCOLORBREWER para mejorar las visualizaciones:
install.packages("RColorBrewer")
library(RColorBrewer) # No solo hay que instalarla, tambiém hay que activar la librería
package 'RColorBrewer' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\INGENIERO SALINA\AppData\Local\Temp\RtmpGCm48S\downloaded_packages
In [122]:
# Agregamos Paraguay
TopNaranjas <-  orangeec %>%
                filter(Country %in% c("Mexico", "Panama", "Argentina","Colombia", "Brazil","Paraguay"))
TopNaranjas
A data.frame: 6 × 16
CountryGDP.PCGDP.US.billGDP.Growth..Services...GDPCreat.Ind...GDPInflationUnemploymentX..pop.below.poverty.lineInternet.penetration...populationMedian.ageX..pop.25.54Education.invest...GDPStrong_economyCrecimiento_GPDAnaranjados
<chr><int><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><chr><chr><chr>
Argentina20900 637.72.960.93.825.7 8.125.793.131.739.385.9Sobre-Arriba promedio pib per cápita2.5% o másMas anaranjados
Brazil 156002055000.01.072.82.6 3.411.8 4.270.732.043.865.9Sobre-Arriba promedio pib per cápitaMenos 2.5 Mas anaranjados
Colombia 14500 309.21.861.43.3 4.310.528.063.230.041.914.5Sobre-Arriba promedio pib per cápitaMenos 2.5 Mas anaranjados
Mexico 199001149000.02.064.07.4 6.0 3.646.265.028.340.815.3Sobre-Arriba promedio pib per cápitaMenos 2.5 Mas anaranjados
Panama 25400 61.85.482.06.3 0.9 5.523.069.729.240.353.2Sobre-Arriba promedio pib per cápita2.5% o másMas anaranjados
Paraguay 9800 29.64.354.54.1 3.6 6.522.289.628.241.085.0Por debajo promedio pib per cápita 2.5% o másMas anaranjados
In [123]:
# Viendo más información con facet wrap - Parte 2 Economía Naranja
ggplot(TopNaranjas, aes(x=Internet.penetration...population,
                        y=Services...GDP, size=GDP.PC))+
                    geom_point()+
                    facet_wrap(~Country)
In [124]:
# Aporte industrias creativas al PIB
ggplot(TopNaranjas, 
       aes(x=Education.invest...GDP,
           y=Creat.Ind...GDP, 
           size=Unemployment))+
      geom_point()+
      facet_wrap(~Country)
In [125]:
#RColorBrewer
myColors <- brewer.pal(9,"Reds")

ggplot(TopNaranjas, 
       aes(x=Internet.penetration...population,
           y=GDP.PC, 
           fill=Creat.Ind...GDP))+
       geom_tile()+
       facet_wrap(~Country)+
       scale_fill_gradientn(colors=myColors)

Clase 34: R Markdown y documentación PDF¶

Para generar nuestro documento con todas las gráficas y observaciones que hemos realizado a nuestro dataset, para ello necesitamos instalar el paquete rmarkdown y knitr:

R Markdown nos permite generar archivos en formato HTML, PDF y Word. La mejor opción es trabajar en un formato HTML para compartirlo por internet y posteriormente convertirlo ya a PDF o Word.

In [126]:
install.packages("rmarkdown")
install.packages("knitr")
package 'rmarkdown' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\INGENIERO SALINA\AppData\Local\Temp\RtmpGCm48S\downloaded_packages
package 'knitr' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\INGENIERO SALINA\AppData\Local\Temp\RtmpGCm48S\downloaded_packages
In [127]:
library(rmarkdown) # No solo hay que instalarla, tambiém hay que activar la librería
library(knitr) # No solo hay que instalarla, tambiém hay que activar la librería

Configuramos nuestro archivo y damos click en knit, lo guardamos como "economia_naranja.rmd"

Conforme agregamos chunks de código podemos ir dando click en knit o ctrl + shift + k para ir actualizando el archivo, podemos publicar o exportar este archivo.


Title: "Economia Naranja" Author: "Rusbel Bermudez" Date: "September 17, 2020" output: html_document


In [135]:
orangeec <- read.csv("./orangeec.csv", header = TRUE)

summary(orangeec)
   Country              GDP.PC       GDP.US.bill         GDP.Growth..  
 Length:17          Min.   : 5600   Min.   :     13.7   Min.   :0.800  
 Class :character   1st Qu.: 8300   1st Qu.:     37.1   1st Qu.:2.000  
 Mode  :character   Median :13300   Median :     75.7   Median :2.800  
                    Mean   :14053   Mean   : 188693.0   Mean   :2.959  
                    3rd Qu.:19900   3rd Qu.:    309.2   3rd Qu.:4.200  
                    Max.   :25400   Max.   :2055000.0   Max.   :5.400  
                                                                       
 Services...GDP  Creat.Ind...GDP   Inflation       Unemployment   
 Min.   :50.00   Min.   :1.000   Min.   : 0.400   Min.   : 2.300  
 1st Qu.:56.90   1st Qu.:2.000   1st Qu.: 1.600   1st Qu.: 5.500  
 Median :62.20   Median :2.600   Median : 3.400   Median : 6.700  
 Mean   :62.64   Mean   :3.291   Mean   : 4.365   Mean   : 6.794  
 3rd Qu.:64.90   3rd Qu.:3.950   3rd Qu.: 4.300   3rd Qu.: 8.100  
 Max.   :82.00   Max.   :7.400   Max.   :25.700   Max.   :11.800  
                 NA's   :6                                        
 X..pop.below.poverty.line Internet.penetration...population   Median.age   
 Min.   : 4.20             Min.   :38.20                     Min.   :22.10  
 1st Qu.:21.70             1st Qu.:57.70                     1st Qu.:25.70  
 Median :25.70             Median :69.70                     Median :28.20  
 Mean   :27.65             Mean   :68.42                     Mean   :28.28  
 3rd Qu.:32.70             3rd Qu.:79.90                     3rd Qu.:31.30  
 Max.   :59.30             Max.   :93.10                     Max.   :35.00  
                                                                            
  X..pop.25.54   Education.invest...GDP
 Min.   :34.12   Min.   :2.800         
 1st Qu.:39.23   1st Qu.:4.400         
 Median :40.19   Median :5.000         
 Mean   :39.88   Mean   :5.082         
 3rd Qu.:41.08   3rd Qu.:5.900         
 Max.   :44.03   Max.   :7.400         
                                       
In [136]:
pairs(orangeec[,6:10])
In [137]:
library(ggplot2)
In [129]:
ggplot()+geom_histogram(data=orangeec,aes(x=Internet.penetration...population),
    fill="lightblue",color="darkblue",binwidth=5)+
labs(x="Penetración de Internet (%) población", y="Cantidad de Países",
    title="Penetración de Internet en LATAM")+
scale_x_continuous(breaks=seq(38, max(96), 2))+
theme(legend.position="none")+
theme(panel.background=element_blank(),
    panel.grid.major=element_blank(), panel.grid.minor=element_blank())
In [138]:
library(dplyr)
In [139]:
mean <- mean(orangeec$GDP.PC)
In [140]:
orangeec <- orangeec %>%
    mutate(strongEconomy = ifelse(GDP.PC < mean,
    "Por debajo del promedio PIB", "Por encima del promedio PIB"))
In [141]:
orangeec <- orangeec %>%
    mutate(strongEconomy = ifelse(GDP.PC < mean,
    "Por debajo del promedio PIB", "Por encima del promedio PIB"))

El Boxplot indica que los países por encima del promedio del PIB tienen una dispersión mucho más alta en relación a los aportes de la economía naranja al PIB del país. CUIDADO, contrastar con desviación estándar.

Clase 35: Data science¶

In [144]:
#cierre
cajas <- c(1,2,3,4,5,6,7,8)
tiempo <- c(10,9,8,5.8,6,3,1.8,1)
plot(tiempo~cajas)
In [156]:
plot(orangeec$Services...GDP~orangeec$Education.invest...GDP) 
# scatterplot por ser dos variables numéricas, numéricos con factores dará un boxplot
In [157]:
boxplot(mtcars$mpg ~ mtcars$Peso)

Tips:

Cuando no tengamos un DataFrame completo, siempre podemos usar los vectores para construir visualizaciones.

Utilizando plot tenemos una representación automática de los datos, cuando pasamos dos variables numéricas obtenemos un scatterplot y cuando pasamos una numérica y otras categóricas obtenemos un boxplot.

Recomendaciones para seguir:

  • Escribir funciones
  • Limpiar datasets
  • Importar y leer datasets
  • Ampliar el análisis de correlación y pasar a regresión lineal
  • Hacer otro tipo de visualizaciones como mapas de calor
  • Hacer DashBoards o tableros de control interactivos para presentar la información con Shiny

Lectura Recomendada:

https://bookdown.org/jboscomendoza/r-principiantes4/

http://eio.usc.es/pub/pateiro/files/pubdocentepracticasestadistica.pdf

https://www.povertyactionlab.org/sites/default/files/r-cheat-sheet.pdf

https://rstudio.com/wp-content/uploads/2015/04/ggplot2-spanish.pdf